Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.26;
Скачать: CL | DM;

Вниз

Обход папок файлов, доступ к которым запрещен системой!   Найти похожие ветки 

 
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. Странно, почему только до тр&#235;х точек в имени проверяется?


 
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. Странно, почему только до тр&#235;х точек в имени проверяется?

Виста создает папку, которая в проводнике имеет имя из трех точек, а в консоли, при вызове 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]
>
>

Я тебе без нам&#235;ка скажу, findfirst сам разбер&#235;тся можно тебе содержимое папки просматривать или нет и при использовании этих функций делать просматриваемую папку текущей совершенно не обязательно.
Советую прочитать об операциях со строками, а то так и будешь дерьмокодить.


 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
2-1300290965
lewka
2011-03-16 18:56
2011.06.26
Работа с текстом в MS Word


15-1299923817
Polevi
2011-03-12 12:56
2011.06.26
Solution explorer


15-1300117961
Сергей К.
2011-03-14 18:52
2011.06.26
Bob Marley - no woman, no cry


2-1300534060
Labor
2011-03-19 14:27
2011.06.26
Tsplitter и Timage


1-1257767754
Chizhov
2009-11-09 14:55
2011.06.26
Определение начала/завершения сеанса пользователя из сервиса?