Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

Ghost del vonte ©   (2011-03-16 08:36:00) 

Доброго времени суток!

Столкнулся с проблемой: моя программа ищет по всему диску текстовые файлы, чтобы потом работать с ними! Так вот, как только она натыкается на файл или папку, доступ к которой закрыт системой - ошибка! ( 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;


Заранее огромная благодарность!


Inovet   (2011-03-16 22:03:00) [1]

> [7] Ghost del vonte ©   (16.03.11 09:54)
> 7154~1 - это глюк в Висте, она создает папки, которые невозможно удалить!

Конечно - происки коварного Билли, а программеры всё правильно делают.


Dennis I. Komarov   (2011-03-16 11:21:00) [2]

На чужой код смотреть вредно...


DiamondShark   (2011-03-16 11:00:00) [3]


> 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 10:52:00) [4]


> DiamondShark ©   (16.03.11 10:49) [24]

Я все думал, кто же напишет... :)


DiamondShark   (2011-03-16 10:49:00) [5]


>  функция позаимствована из книги А.Я.Архангельского,

Охохонюшки... :(


Ghost del vonte   (2011-03-16 10:28:00) [6]

Поиск прерывается на папке System Volume Information

В код я вносил лишь добавление текстового файла, и пропуск этих двух папок,
до Висты не знал проблем, и вот сейчас попался, ладно, уберу функцию поиска по всему диску, оставлю функцию поиска в выбранной папке!
Всем спасибо! :)


brother   (2011-03-16 10:16:00) [7]

http://www.bacart.ru/delphi-rekursivnyy-obhod-papok


Плохиш   (2011-03-16 10:15:00) [8]


> Ghost del vonte ©   (16.03.11 10:04) [16]
>
>

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


brother   (2011-03-16 10:14:00) [9]

смотри тогда сюда:
http://www.delphisources.ru/pages/faq/base/recursion_dir_class.html


sniknik   (2011-03-16 10:13:00) [10]

> Вы мне скажите, как избежать заблокированных папок?
сколько раз? одного не достаточно?


Anatoly Podgoretsky   (2011-03-16 10:08:00) [11]

Она сама избегать, а по окончанию или ошибка или успех


brother   (2011-03-16 10:05:00) [12]

> А с этой папкой 7154~1 у меня проблем нет,

ндя...


Ghost del vonte   (2011-03-16 10:04:00) [13]


> дальше что?)


Вы мне скажите, как избежать заблокированных папок? Типа тех, куда помещаются точки восстановления! А с этой папкой 7154~1 у меня проблем нет, она пропускается, а вот другие системные нет....


sniknik   (2011-03-16 10:02:00) [14]

> которая в проводнике имеет имя из трех точек, а в консоли, при вызове
в системе есть длинные и короткие имена...


brother   (2011-03-16 10:02:00) [15]

> Виста создает папку,

так это проблемма не висты, а ФС (предположу НТФС) и тебя, как локального админа... дальше что?)


sniknik   (2011-03-16 10:01:00) [16]

> 7154~1 - это глюк в Висте, она создает папки, которые невозможно удалить!
все возможно, просто у тебя прав не хватает. (обязательны на вождение мотоциклом, машиной и вертолетом :о))

система когда устанавливает/апдейтит что-то иногда создает от имени "система", и если установка прервалась ...
установи "себя" в доступе на эту папку, дай права на удаление и ... вуаля. хотя проще, возможно просто загрузиться в "безопасном режиме".


Ghost del vonte   (2011-03-16 09:59:00) [17]


> PS. Странно, почему только до трëх точек в имени проверяется?

Виста создает папку, которая в проводнике имеет имя из трех точек, а в консоли, при вызове Dir C: /x выдает имя этой папки как 7154~1


brother   (2011-03-16 09:58:00) [18]

> на этих папка программа попросту виснет! Поэтому она пропускается!

ты уже знаешь имена ВСЕХ папок, где будет вешаться ТВОЯ програ?


Ghost del vonte   (2011-03-16 09:57:00) [19]


> 7154~1 - это глюк в Висте, она создает папки, которые невозможно
> удалить!

Невозможно прочитать, и т.д., на этих папка программа попросту виснет! Поэтому она пропускается!


brother   (2011-03-16 09:55:00) [20]

я даже спроить не буду ок?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо