Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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. Странно, почему только до тр&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.004 c
2-1300886684
>|<
2011-03-23 16:24
2011.06.26
Quick Report: Блокируется файл отчета после экспорта в PDF


2-1300915523
fynjy93
2011-03-24 00:25
2011.06.26
проблема с дбчекбокс


15-1299187799
Юрий
2011-03-04 00:29
2011.06.26
С днем рождения ! 4 марта 2011 пятница


15-1300095354
Dennis I. Komarov
2011-03-14 12:35
2011.06.26
Глюк AReader-а


2-1300549046
RUu
2011-03-19 18:37
2011.06.26
adodataset





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский