Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Защита от записи на диск


Автор: Демидрол 7.6.2008, 14:53
Помогите пожалуйста решить проблему с проверкой флешки на затщиту от записи.
Не догоняю,как сделать такую проверку.
 smile 

Автор: bronislav 7.6.2008, 18:22
Т.е.?
Форумные телепаты ушли в отпуск.
Конкретнее сформулируй вопрос.

Автор: chipset 7.6.2008, 21:18
Попробуй записать туда что-то и если не получится -- значит она защищена  smile 

Автор: Демидрол 9.6.2008, 09:08
идея в том,чтобы вставить флешку в комп и,если она не защищена от записи,автоматически скопировать на ней кое-какую инфу.
Бред,на самом деле,потому как если попробовать копировать на нее и она будет защищена от записи,то можно просто вывести сообщение об ошибке. Но, блин, начальство требует, чтобы можно было отдельно проверить флеху на  защиту от записи.  smile

Добавлено через 3 минуты и 30 секунд
Цитата(chipset @ 7.6.2008,  21:18)
Попробуй записать туда что-то и если не получится -- значит она защищена  smile

просто поймать сообщение об ошибке, если она защищена,а если нет, то потом скопированный файл просто удалить?
Туплю,но какой файл копировать? Ведь х.з., что там на компе есть.... smile 

Автор: jonie 9.6.2008, 12:44
главное в этом деле не малочиться. писать предлагаю pagefile.sys он точно есть  smile 

Автор: bsa 9.6.2008, 12:56
Цитата(Демидрол @ 9.6.2008,  09:08)
просто поймать сообщение об ошибке, если она защищена,а если нет, то потом скопированный файл просто удалить?
Туплю,но какой файл копировать? Ведь х.з., что там на компе есть.... smile

 smile 
Зачем что-то копировать? Просто попробуй создать файл со случайным именем. Если функция open (fopen) не вернет ошибку, то флешка без защиты от записи, то тебе останется только стереть его (unlink).

Автор: Демидрол 9.6.2008, 13:47
простите пожалуйста за ОЧЕНЬ глупый вопрос, но вразумительного про создание файла я нашел много,только как прописать путь,допустим, "c:\\", не попалось на глаза. Помогите кодом, если можно.
 smile 

Автор: rrrFer 9.6.2008, 14:23
Демидрол, 
Цитата(Демидрол @  9.6.2008,  13:47 Найти цитируемый пост)
простите пожалуйста за ОЧЕНЬ глупый вопрос, но вразумительного про создание файла я нашел много,только как прописать путь,допустим, "c:\\", не попалось на глаза. Помогите кодом, если можно.

FILE *f=fopen("D:\\file_name","w");

Автор: Демидрол 9.6.2008, 14:38
Всем большое СПАСИБО за помощь,очень помогли в тупую минуту.
Отдельное спс bsa за идею rrrFer за рализацию. smile 

Автор: yurik_l 9.6.2008, 15:00
А что, если через GetDiskFreeSpaceEx получить свободное место на флешке. Если флешка защищена от записи, то функция скорее всего вернет нуль. С двд и сд, например, это проходит.

Автор: rrrFer 9.6.2008, 15:27
yurik_l, 
Цитата

А что, если через GetDiskFreeSpaceEx получить свободное место на флешке. Если флешка защищена от записи, то функция скорее всего вернет нуль. С двд и сд, например, это проходит.

я думаю, что нуль она не вернет, потому что защита стоит лишь от записи

Автор: Демидрол 10.6.2008, 14:47
Такой вопрос по ходу возник:
если файл создавать с помощью open(FileName,O_CREATE), то что возвратит open в случае,если файл не был создан?Отрицательное или нулевое значение?

Автор: rrrFer 10.6.2008, 16:35
Демидрол, 
так:
Код

fstream file("name.txtx",ios::in|ios::out); //вызвал конструктор - создал файл, если файла не было
if(!file)    //если не удалось создать
    cout<<"error open file"<<endl;

------
аналогично и open наверно работает
------
выше вроде бы про fopen писали, тогда так:
Код

FILE *file;
if (NULL == (file = fopen ("name.txt", "rw")))
    cout<<"error open file"<<endl;

------
Цитата

что возвратит open в случае,если файл не был создан?Отрицательное или нулевое значение?

нетрудно провести эксперимент кстати smile

Автор: bsa 10.6.2008, 18:17
Демидрол
Цитата(man 3 open)
RETURN VALUE
       open()  and  creat()  return the new file descriptor, or -1 if an error
       occurred (in which case, errno is set appropriately).


rrrFerА посмотреть лень было? Open работает совершенно подругому. Более того, open - это функция, а fstream - это класс.

Автор: rrrFer 10.6.2008, 19:25
bsa, 
Цитата

rrrFerА посмотреть лень было?

конечно лень.
Цитата

Более того, open - это функция, а fstream - это класс.

я и не утвержал обратное, читайте внимательно:
Цитата

fstream file("name.txtx",ios::in|ios::out); //вызвал конструктор - создал файл, если файла не было

а конструктор - это функция

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)