Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
ВнизDeleteFile Найти похожие ветки
← →
Vova (2008-11-12 14:21) [0]Подскажите пожалуйста новичку,
Я пытаюсь удалить файл функцией DeleteFile
Всё нормально, но когда атрибут файла "только для чтения" функция не хочет его удалять и выдает ошибку #5,
В windows можно ведь любые файлы удалять и "только для чтения" и с другими атрибутами, как мне это сделать?
← →
clickmaker © (2008-11-12 14:25) [1]сначала сбрось атрибут
← →
Vova (2008-11-12 15:10) [2]
> сначала сбрось атрибут
Сделал так как Вы посоветовали - работает, спасибо!
(
if GetFileAttributes(PChar(fileName)) = 33 then
SetFileAttributes(PChar(fileName), 32);
)
← →
Поросенок Винни-Пух © (2008-11-12 15:18) [3]неверно.
← →
clickmaker © (2008-11-12 15:52) [4]> [2] Vova (12.11.08 15:10)
а если у файла окажутся еще атрибуты кроме 32 и 1?
← →
Anatoly Podgoretsky © (2008-11-12 16:44) [5]> Vova (12.11.2008 15:10:02) [2]
Неправильно, но для простейшего случая, тем более для удаления пойдет.
← →
Anatoly Podgoretsky © (2008-11-12 16:44) [6]> clickmaker (12.11.2008 15:52:04) [4]
Ничего страшного, удалятся только часть файлов.
← →
Vova (2008-11-13 00:45) [7]
> Неправильно, но для простейшего случая, тем более для удаления
> пойдет.
Надо сделать правильно, как сделать правильно?
← →
Palladin © (2008-11-13 08:53) [8]
> Надо сделать правильно, как сделать правильно?
изучить, что такое биты и как с ними работать. операции or, and
ну и xor и not до кучи. понять что такое атрибуты файла, как они хранятся.
и тогда ты сможешь сделать правильно.
← →
Рамиль © (2008-11-13 08:57) [9]Атрибут файла это dword, каждый бит отвечает за какой либо атрибут (или зарезервирован). Соот. надо сбросить биты readonly, hidden, system.
http://msdn.microsoft.com/en-us/library/aa915578.aspx
← →
Vayrus (2008-11-21 10:06) [10]
function DeleteFileMain(ABWG: String): Boolean;
begin
RESULT := SetFileAttributes(PChar(ABWG), 0);
if RESULT then
begin
RESULT := DeleteFile(PChar(ABWG));
Application.ProcessMessages;
Sleep(500);
Application.ProcessMessages;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DeleteFileMain("test.exe") then
ShowMessage("Done") else
ShowMessage("Error");
end;
← →
Riply © (2008-11-21 11:14) [11]> [10] Vayrus (21.11.08 10:06)
А можно пояснить код ?
← →
Anatoly Podgoretsky © (2008-11-21 11:27) [12]
> Vayrus (21.11.08 10:06) [10]
Еще один, которые не читал http://www.podgoretsky.com/OtherParts/DM/BadWill.aspx №4
← →
Anatoly Podgoretsky © (2008-11-21 11:29) [13]
> А можно пояснить код ?
Психотренировку пройти хочешь?
← →
Riply © (2008-11-21 11:34) [14]> [13] Anatoly Podgoretsky © (21.11.08 11:29)
> Психотренировку пройти хочешь?
Неа. Просто интересно :)
← →
Anatoly Podgoretsky © (2008-11-21 11:42) [15]> Riply (21.11.2008 11:34:14) [14]
Тогда ты рисковый игрок :-)
← →
Palladin © (2008-11-21 11:50) [16]
> А можно пояснить код ?
пояснения просты: откуда то содрано :)
← →
clickmaker © (2008-11-21 12:05) [17]DeleteFileMain наводит на мысль, что должна быть еще функция для не главных файлов
← →
Anatoly Podgoretsky © (2008-11-21 12:30) [18]А может не главная?
← →
Vayrus (2008-11-21 14:20) [19]
> Еще один, которые не читал http://www.podgoretsky.com/OtherParts/DM/BadWill.
> aspx №4
Реклама?
> пояснения просты: откуда то содрано :)
Наглая лож, не всем же откуда то сдирать
> DeleteFileMain наводит на мысль, что должна быть еще функция
> для не главных файлов
Ни на че не наводит, взято на абум
> А может не главная?
Не надоело до слов докапываться?
← →
Vayrus (2008-11-21 14:28) [20]
> А можно пояснить код ?
Сначало скидываем все атрибуты файла и если все получилось, то пытаемся удалить, пауза выставлена потому, что функция DeleteFile возвращает результат до того как фактически удалит файл, то есть мы даем, скажем так, дополнительное время для функции. А так как использование ПАУЗЫ подвешивает приложение (или если ты будешь удалять несколько файлов), то пришлось позаботиться и об этом - ProcessMessages.
Если ТРУЕ то все пучком, иначе что то пошло не так.
← →
Palladin © (2008-11-21 14:28) [21]
> Vayrus (21.11.08 14:20) [19]
а самое главное это конечно sleep и Application.ProcessMessages :) без этого ничего не заработает
← →
Vayrus (2008-11-21 14:29) [22]
> а самое главное это конечно sleep и Application.ProcessMessages
> :) без этого ничего не заработает
Заработает для мелковесных файлов
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c