C/C++ - [решено] Открытие файлов на запись

Аватара пользователя
O L E G

C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

Подскажите код, с помощью которого можно открыть файлы на запись или установить защиту на него, Но при этом что бы я мог считать с него данные, но нем мог их записать и удалить сам файл. За ранее спасибо
Аватара пользователя
ferget

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение ferget »

Код:

Код: Выделить всё

#include 
#include 
using namespace std;
int main()
{
    fstream fin;
    fin.open("input.txt", fstream::in);
    return 0;
}
Аватара пользователя
O L E G

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

Работает!

НО на чтение (не возможно перенести,удалить,переименовать) но можно записать в него!!!

Подскажи, как сделать так что бы было только чтение на файле, но записать нельзя было бы в него.

Будет проблема еще с записью потому что на файле стоит Read Only, надо снять его, после открыть на запись и снова установить чтение

Помогите, я только начинаю поэтому не которые аспекты Трудно найти

Спасибо
Аватара пользователя
O L E G

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

Пробовал



Код:

Код: Выделить всё

-fstream - обощенный поток ввода/вывода в файл
 -ofstream - поток записи в файл

-----



Код:

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <clocale>
using std::cout;
using std::endl;
using namespace std;
int main()
{
	setlocale(LC_CTYPE,"Russian");
    ifstream fin;
    fin.open("C://1.txt", ifstream::in);
	cout << "Защита установлена C://boot.ini" << endl;
	system("pause");
    return 0;
}

но записать все равно возможно, к примеру файл boot.ini, как поставить защиту от записи,но на чтение оставить
Аватара пользователя
ferget

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение ferget »

вот простой пример

на время работы программы снимается атрибут readonly, в файл записать нельзя





Код:

Код: Выделить всё

#include 
#include 
using namespace std;
int main()
{
    system ("attrib -r input.txt");
    fstream fin;
    fin.open("input.txt", fstream::in|fstream::out);
    int k=0;
    while(k!=1)
    {
        cin>>k;
    }
    system ("attrib +r input.txt");
    return 0;
}
Аватара пользователя
O L E G

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

ferget, проверил скрипт, работает до этого действия





Код:

Код: Выделить всё

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    system ("attrib -r input.txt");
    fstream fin;
    fin.open("input.txt", fstream::in|fstream::out);

Дальше стоит окно и не каких действий! Причем запись произвести удаеться в файл



А если так попробовать



Код:

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <clocale>
using std::cout;
using std::endl;
using namespace std;
int main()
{
	setlocale(LC_CTYPE,"Russian");
    system ("attrib -r input.txt");
    fstream fin;
    fin.open("input.txt", fstream::in|fstream::out);
	system ("attrib +r input.txt");
	cout << "Защита установлена input.txt" << endl;
	system("pause");
    return 0;
}

Все работает,кроме (опять же запись в файл производиться)
Аватара пользователя
ferget

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение ferget »

Цитата O L E G:



Дальше стоит окно и не каких действий!
C/C++ - [решено] Открытие файлов на запись




так никаких действий быть и не должно, если введете 1, программа завершит работу




Цитата O L E G:



Причем запись произвести удаеться в файл
C/C++ - [решено] Открытие файлов на запись




странно, у меня работает так, можно открыть файл, блокнотом, можно написать в блокноте, но при сохранении пишет "файл занят другим процессом"
Аватара пользователя
O L E G

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

ferget, перепроверил, не работает (

Даже не пойму в чем проблема. Интересно даже самому
Аватара пользователя
ferget

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение ferget »

так попробуйте



Код: Выделить всё

#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdio.h>
using namespace std;
int main()
{
	HANDLE hAppend;
	DWORD  dwBytesRead=10, dwBytesWritten=10, dwPos=0;
	hAppend = CreateFile(TEXT("inp.txt"), 
		GENERIC_WRITE,         
		FILE_SHARE_READ,          
		NULL,                     
		OPEN_ALWAYS,              
		FILE_ATTRIBUTE_NORMAL,    
		NULL);                    
	if (hAppend == INVALID_HANDLE_VALUE)
	{
		printf("Could not open inp.txt.");
		return 0;
	}
	LockFile(hAppend, dwPos, 0, dwBytesRead, 0);
	int k=0;
	while(k!=1)
	{
		cin>>k;
	}
	UnlockFile(hAppend, dwPos, 0, dwBytesRead, 0);
	return 0;
}
Аватара пользователя
O L E G

Re: C/C++ - [решено] Открытие файлов на запись

Сообщение O L E G »

Спасибо, в этот раз помогло все. Если не ошибаюсь это функия winapi и она более функциональна чем прошлый код



Интересно, а приемлема такая же блокировка в ключам реестра?





Чуть подредактил твой код,убрал от туда функцию



Код:

Код: Выделить всё

LockFile(hAppend, dwPos, 0, dwBytesRead, 0);

работает как надо, файл читаемый но записать и изменить нельзя, Спасибо за помощь еще раз
Ответить

Вернуться в «Программирование и базы данных»