Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
ВнизОбход папок файлов, доступ к которым запрещен системой! Найти похожие ветки
← →
Ghost del vonte © (2011-03-16 08:36) [0]Доброго времени суток!
Столкнулся с проблемой: моя программа ищет по всему диску текстовые файлы, чтобы потом работать с ними! Так вот, как только она натыкается на файл или папку, доступ к которой закрыт системой - ошибка! ( Access Denied ).... скажите, как обойти такие файлы и папки? Вот код поиска
( функция позаимствована из книги А.Я.Архангельского, огромная ему благодарность! (переделана под конкретный случай), посоветуйте как ее дополнить, чтобы избежать этих файлов....procedure ViewDir(SDir: string);
var SR: TSearchRec;
ires: integer;
CurDir, S: string;
begin
CurDir := GetCurrentDir;
ChDir(SDir);
ires := FindFirst("*.*", faAnyFile, SR);
while ires = 0 do
begin
Application.ProcessMessages;
if (SR.Name <> ".") and (SR.Name <> "..") and (SR.Name <> "...") and (SR.Name <> "7154~1")
then begin
if ((SR.Attr and faDirectory) <> 0) then
ViewDir(SR.Name) else begin
S:= AnsiUpperCase(ExtractFileExt(SR.Name));
if (S = ".TXT") then
begin
DList.Add(GetCurrentDir+"\"+SR.Name);
fmLE.Panel3.Caption:= SR.Name;
fmLE.Panel3.Update;
end;
end;
end;
ires := FindNext(SR)
end;
FindClose(SR);
fmLE.Panel3.Caption:= "";
ChDir(CurDir);
end;
Заранее огромная благодарность!
← →
Dennis I. Komarov © (2011-03-16 09:22) [1]try/except
← →
brother © (2011-03-16 09:26) [2]> (переделана под конкретный случай)
> (SR.Name <> "7154~1")
Жестко!)
← →
Anatoly Podgoretsky © (2011-03-16 09:31) [3]> Ghost del vonte (16.03.2011 08:36:00) [0]
Что значит обойти, плевать на систему безопасности, мне все можно?
← →
brother © (2011-03-16 09:33) [4]> Что значит обойти
> посоветуйте как ее дополнить, чтобы избежать этих файлов....
я правильно понимаю?)
← →
Anatoly Podgoretsky © (2011-03-16 09:45) [5]Тогда ничего делать не надо, они избегут
← →
brother © (2011-03-16 09:46) [6]а мыж не знаем, чего там РЕАЛЬНО ищет автор топика? ;)
← →
Ghost del vonte © (2011-03-16 09:54) [7]Обойти, значит пропускать эти файлы или папки))
> brother © (16.03.11 09:26) [2]
>
> > (переделана под конкретный случай)
>
>
> > (SR.Name <> "7154~1")
>
> Жестко!)
7154~1 - это глюк в Висте, она создает папки, которые невозможно удалить!
← →
Плохиш © (2011-03-16 09:54) [8]
> CurDir := GetCurrentDir;
> ChDir(SDir);
>
Дерьмокодер-маразматик.
PS. Странно, почему только до трëх точек в имени проверяется?
← →
brother © (2011-03-16 09:55) [9]я даже спроить не буду ок?
← →
Ghost del vonte © (2011-03-16 09:57) [10]
> 7154~1 - это глюк в Висте, она создает папки, которые невозможно
> удалить!
Невозможно прочитать, и т.д., на этих папка программа попросту виснет! Поэтому она пропускается!
← →
brother © (2011-03-16 09:58) [11]> на этих папка программа попросту виснет! Поэтому она пропускается!
ты уже знаешь имена ВСЕХ папок, где будет вешаться ТВОЯ програ?
← →
Ghost del vonte © (2011-03-16 09:59) [12]
> PS. Странно, почему только до трëх точек в имени проверяется?
Виста создает папку, которая в проводнике имеет имя из трех точек, а в консоли, при вызове Dir C: /x выдает имя этой папки как 7154~1
← →
sniknik © (2011-03-16 10:01) [13]> 7154~1 - это глюк в Висте, она создает папки, которые невозможно удалить!
все возможно, просто у тебя прав не хватает. (обязательны на вождение мотоциклом, машиной и вертолетом :о))
система когда устанавливает/апдейтит что-то иногда создает от имени "система", и если установка прервалась ...
установи "себя" в доступе на эту папку, дай права на удаление и ... вуаля. хотя проще, возможно просто загрузиться в "безопасном режиме".
← →
brother © (2011-03-16 10:02) [14]> Виста создает папку,
так это проблемма не висты, а ФС (предположу НТФС) и тебя, как локального админа... дальше что?)
← →
sniknik © (2011-03-16 10:02) [15]> которая в проводнике имеет имя из трех точек, а в консоли, при вызове
в системе есть длинные и короткие имена...
← →
Ghost del vonte © (2011-03-16 10:04) [16]
> дальше что?)
Вы мне скажите, как избежать заблокированных папок? Типа тех, куда помещаются точки восстановления! А с этой папкой 7154~1 у меня проблем нет, она пропускается, а вот другие системные нет....
← →
brother © (2011-03-16 10:05) [17]> А с этой папкой 7154~1 у меня проблем нет,
ндя...
← →
Anatoly Podgoretsky © (2011-03-16 10:08) [18]Она сама избегать, а по окончанию или ошибка или успех
← →
sniknik © (2011-03-16 10:13) [19]> Вы мне скажите, как избежать заблокированных папок?
сколько раз? одного не достаточно?
← →
brother © (2011-03-16 10:14) [20]смотри тогда сюда:
http://www.delphisources.ru/pages/faq/base/recursion_dir_class.html
← →
Плохиш © (2011-03-16 10:15) [21]
> Ghost del vonte © (16.03.11 10:04) [16]
>
>
Я тебе без намëка скажу, findfirst сам разберëтся можно тебе содержимое папки просматривать или нет и при использовании этих функций делать просматриваемую папку текущей совершенно не обязательно.
Советую прочитать об операциях со строками, а то так и будешь дерьмокодить.
← →
brother © (2011-03-16 10:16) [22]http://www.bacart.ru/delphi-rekursivnyy-obhod-papok
← →
Ghost del vonte © (2011-03-16 10:28) [23]Поиск прерывается на папке System Volume Information
В код я вносил лишь добавление текстового файла, и пропуск этих двух папок,
до Висты не знал проблем, и вот сейчас попался, ладно, уберу функцию поиска по всему диску, оставлю функцию поиска в выбранной папке!
Всем спасибо! :)
← →
DiamondShark © (2011-03-16 10:49) [24]
> функция позаимствована из книги А.Я.Архангельского,
Охохонюшки... :(
← →
Dennis I. Komarov © (2011-03-16 10:52) [25]
> DiamondShark © (16.03.11 10:49) [24]
Я все думал, кто же напишет... :)
← →
DiamondShark © (2011-03-16 11:00) [26]
> Dennis I. Komarov © (16.03.11 10:52) [25]
Не, ну а чо?
> CurDir := GetCurrentDir;
> ChDir(SDir);
> DList.Add(GetCurrentDir+"\"+SR.Name);
> SR.Name <> "7154~1"
Это же адский ад.
Про такие мелочи, как смешивание в кучу UI и обработки данных я и не заикаюсь даже.
← →
Dennis I. Komarov © (2011-03-16 11:21) [27]На чужой код смотреть вредно...
← →
Inovet © (2011-03-16 22:03) [28]> [7] Ghost del vonte © (16.03.11 09:54)
> 7154~1 - это глюк в Висте, она создает папки, которые невозможно удалить!
Конечно - происки коварного Билли, а программеры всё правильно делают.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.004 c