Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1226061957
frgs
2008-11-07 15:45
2009.01.04
Предварительный просмотр


2-1227254049
Nil
2008-11-21 10:54
2009.01.04
Дефрагментация реестра


15-1225940622
axd
2008-11-06 06:03
2009.01.04
мячик


9-1176419505
Gabriel de Montgomery
2007-04-13 03:11
2009.01.04
Сохранение карты


15-1226064105
Suspended
2008-11-07 16:21
2009.01.04
Пятничную задачку не хотите?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский