Показать полную графическую версию : [решено] Открытие файлов на запись
Подскажите код, с помощью которого можно открыть файлы на запись или установить защиту на него, Но при этом что бы я мог считать с него данные, но нем мог их записать и удалить сам файл. За ранее спасибо
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream fin;
fin.open("input.txt", fstream::in);
return 0;
}
Работает!
НО на чтение (не возможно перенести,удалить,переименовать) но можно записать в него!!!
Подскажи, как сделать так что бы было только чтение на файле, но записать нельзя было бы в него.
Будет проблема еще с записью потому что на файле стоит Read Only, надо снять его, после открыть на запись и снова установить чтение
Помогите, я только начинаю поэтому не которые аспекты Трудно найти
Спасибо
Пробовал
-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, как поставить защиту от записи,но на чтение оставить
вот простой пример
на время работы программы снимается атрибут readonly, в файл записать нельзя
#include <iostream>
#include <fstream>
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;
}
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;
}
Все работает,кроме (опять же запись в файл производиться)
Дальше стоит окно и не каких действий!»
так никаких действий быть и не должно, если введете 1, программа завершит работу
Причем запись произвести удаеться в файл »
странно, у меня работает так, можно открыть файл, блокнотом, можно написать в блокноте, но при сохранении пишет "файл занят другим процессом"
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;
}
Спасибо, в этот раз помогло все. Если не ошибаюсь это функия winapi и она более функциональна чем прошлый код
Интересно, а приемлема такая же блокировка в ключам реестра?
Чуть подредактил твой код,убрал от туда функцию
LockFile(hAppend, dwPos, 0, dwBytesRead, 0);
работает как надо, файл читаемый но записать и изменить нельзя, Спасибо за помощь еще раз
Не обошлось без маленького вопроса! Как указать сразу не сколько файлов
hAppend = CreateFile(TEXT("inp.txt", "inp2.txt"), так не рабоет
ну а так
hAppend = CreateFile(TEXT("inp.txt"),
hAppend = CreateFile(TEXT("inp2.txt"),
функция не поддерживает два аргумента
для каждого файла нужна своя переменная
лучше собрать их в массив
а как все это дело в массив загнать?
через int
for
я просто с этим еще не сталкивался
или что то вроде этогою на примере
int main()
{
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for(int i = 0; i < 10; ++i)
std::cout << array[i] << ",";
std::cout << std::endl;
массивы это на потом, а пока вручную
hAppend = CreateFile(TEXT("inp.txt"), FILE_APPEND_DATA, FILE_SHARE_READ, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hAppend == INVALID_HANDLE_VALUE)
{
printf("Could not open inp.txt.");
return 1;
}
hAppend1 = CreateFile(TEXT("inp1.txt"), FILE_APPEND_DATA, FILE_SHARE_READ, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hAppend == INVALID_HANDLE_VALUE)
{
printf("Could not open inp1.txt.");
return 1;
}
//и т.д.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC