1

Тема: Видалення файлів із атрибутом "read only"

Доброго дня. Виникло деяке питаннячко. По завданню треба написати 3 програми для копіювання, переміщення та видалення файлів. Та за умови якщо файл, що видаляється має атрибут "Тільки для читання", то запитати користувача видаляти його, чи ні або видалити всі, або відмінити операцію. Почав писати "копіювання". І все вже написав, програма чітко праціє із звичайними файлами. Але файли Read Only видалятись не хочуть. Єдине, що спало на думку, враховуючи той матеріал, що нам надали, це вручну змінити атрибут файлу на normal Тобто ідея була така:

if (file->attrib & _A_RDONLY)
{
   file->attrib = _A_NORMAL;
   remove (path_dest);
   _CopyFile (path_source, path_dest);
}

Та як з'ясувалося не все так просто. Слідкуючи за відладчиком, дійсно видно, що file->attrib змінюється на 0, але фактично якщо подивитись у властивостях файлу, то як стояла галка "Тільки для читання", так і стоїть. І файл, звісно, не видаляється, remove (path_dest); повертає -1.

На просторах інтернету, знайшов повідомлення, що є функція chmod(), котра зкидує атрибути файлу, але нам про неї навіть не заїкалися, тому хотілося б щоб хтось підказав як простіше це можна зробити.

PS у тестових файлів, котрі я хотів скопіювати і у котрих я поставив атрибут "Тільки для читання" при перевірці атрибутів

if (file->attrib & _A_RDONLY)

виявлялося, що у них атрибут зовсім не _A_RDONLY, а _A_ARCH (архівний) і вони також не видаляються інструкцією

remove (path_dest);

Отакі справи...

2 Востаннє редагувалося 0x9111A (13.08.2014 20:38:29)

Re: Видалення файлів із атрибутом "read only"

Можливо треба права адміністратора для видалення файлів з цими атрибутами
chmod() то в лінухах, на вікнах атрибути можна змінити за допомогою SetFileAttributes()
Ну або запустити attrib

Подякували: koala1

3 Востаннє редагувалося Faltfromoss (13.08.2014 21:11:47)

Re: Видалення файлів із атрибутом "read only"

0x9111A написав:

Можливо треба права адміністратора для видалення файлів з цими атрибутами
chmod() то в лінухах, на вікнах атрибути можна змінити за допомогою SetFileAttributes()
Ну або запустити attrib

Не знаю. Якщо підключити sys/stat.h, то chmod () в принципі працює - атрибути змінюються, файли видаляються. Застосував саме цей метод, бо думаю, довго щось інше шукати знадобиться  %)

4

Re: Видалення файлів із атрибутом "read only"

Faltfromoss написав:
 file->attrib = _A_NORMAL

змінює тільки стан змінної file->attrib, а не файлу на диску.
Ваш К.О.

5

Re: Видалення файлів із атрибутом "read only"

koala написав:
Faltfromoss написав:
 file->attrib = _A_NORMAL

змінює тільки стан змінної file->attrib, а не файлу на диску.
Ваш К.О.

Так, це я вже допер трохи пізніше після того як відкрив тему  *WALL*