Как изменить свойства файла С++

169
01 апреля 2019, 07:00

Нужно удалять файлы, в том числе и файлы "Только чтение". Если в свойствах стоит галочка "Только чтение", то через remove() удалить не получается. Пытался получать информацию о файле в структуру _finddata_t и в ней менять поле attrib,

char[50] path; // Путь к файлу и маска поиска
_finddata_t file; 
_findfirst(path, &file);      
file.attrib = _A_NORMAL;// Попытка сделать файл без запретов на чтение или запись

но тоже ничего.Файл всё равно не удаляется и галочка не снимается. Хотя если снять галолчку в ручную(ПКМ по файлу->свойства), то только тогда удаляется.

Answer 1

Если речь идет о Windows, то тогда можно будет использовать функцию SetFileAttributesW

Answer 2

В POSIX определена такая функция - _chmod, так что, как по мне, самый переносимый способ удалить R/O файл - примерно

int killFile(const char * name)
{
    if (name==0) return 1;
    if (remove(name)) {
        _chmod(name,_S_IWRITE);
    } else return 0;
    return remove(name);
};

Т.е. если первая попытка удалить не проходит - снимаем R/O и пробуем еще раз...

P.S. То, что делаете вы - примерно то же самое, что, пересчитав деньги в кошельке, записать сумму на бумажке (снять информацию о файле в структуру file). После чего увеличить на бумажке (изменить поле структуры file) сумму в 10 раз и надеяться, что в кошельке от этого что-то прибавится...

READ ALSO
Как поставить библиотеку С++ без или с Cmake

Как поставить библиотеку С++ без или с Cmake

Я нашел оболочку для curl и пытаюсь ее "собрать" Что я сделал:

160
Написать метод объединения строк

Написать метод объединения строк

Собственно само задание звучит так:

155
Задача про Диету Деда Мороза C++

Задача про Диету Деда Мороза C++

Задача про Диету Деда Мороза, подробнее на картинкеСамая простая задача из тех что были, все решил эту не удается

160