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

Вниз

странный обход каталогов   Найти похожие ветки 

 
Bosh ©   (2003-07-16 02:29) [0]

Доброе время суток !

Отлаживая программу столкнулся с интересным поведение ф-ий FindFileFirst и FindFileNext. При указании начального пути - локального (винчестера), можно отличить каталоги от файлов
...
FindData.dwFileAttributes<>FILE_ATTRIBUTE_DIRECTORY
...
НО при указании какогонибуть сетевого пути, отличить по этому условию , каталоги от файлов не получается!

В чем проблемма !? Что я делаю не так??


 
Rouse_ ©   (2003-07-16 02:56) [1]

Ошибка в 17 строке

Желаю успехов


 
Theoden   (2003-07-16 02:57) [2]

Я делаю немного подругому см. код


 
Theoden   (2003-07-16 02:58) [3]

if FindFirst(maildir00dop + mailaddr[j][0], FileAttrs, SFile) = 0 then
begin
repeat
if SFile.Attr = faDirectory then continue;
Form1.IdMsg.From.Text := "Office";
Form1.IdMsg.Recipients.EMailAddresses := mailaddr[j][1];
Form1.IdMsg.Subject := SFile.Name;
TIdAttachment.Create(Form1.IdMsg.MessageParts, maildir00dop + SFile.Name);
Form1.IdSMTP.Send(Form1.IdMsg);
Form1.IdMsg.Clear;
DeleteFile(maildir00dop + SFile.Name);
until FindNext(SFile) <> 0;
FindClose(SFile);
end;

работа идет с сетевым диском


 
Bosh ©   (2003-07-16 03:14) [4]

У меня не работает FindNext и FindFirst
faDirectory имеет код 48h, а при откладки аттрибут каталога был равен 30h.
FindFileFirst сразу отличил каталоги от файлов.
Сейчас попробую так сделать . Но наскольно помню у меня так не работало. :-(


 
Rouse_ ©   (2003-07-16 03:21) [5]

Да нибоже ж ты мой, дайте Ваш код

Желаю успехов


 
Bosh ©   (2003-07-16 03:29) [6]

упс)))
вот он

procedure CreateTree(StartDir_,Mask_:string;FlagTree:boolean);
var
FindData:_WIN32_FIND_DATA;
Result_:LongBool;
FindHandle:cardinal;
ext:string;
begin
FindHandle:=FindFirstFile(PAnsiChar(StartDir_+"\*.*"),FindData);
Result_:=true;
while (result_<>false) and (FindHandle<>INVALID_HANDLE_VALUE) do
begin
if (StrPas(FindData.cFileName)<>".") and
(StrPas(FindData.cFileName)<>"..") and
(FindData.dwFileAttributes<>FILE_ATTRIBUTE_DIRECTORY) then
begin
Ext:=ExtractFileExt(UpperCase(StrPas(FindData.cFileName)));
Delete(Ext,1,1);
if ext=(UpperCase(mask_)) then
begin
FileCopyList.Add(StartDir_+"\"+StrPas(FindData.cFileName));
end;
end;
if (StrPas(FindData.cFileName)<>".") and
(StrPas(FindData.cFileName)<>"..") and
(FindData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY) then
begin //--- вот эту локально все работает , при сети не работает
if FlagTree then
CreateTree(StartDir_+"\"+StrPas(FindData.cFileName),Mask_,FlagTree);
end;
Result_:=FindNextFile(FindHandle,FindData);
end;
end;


 
Rouse_ ©   (2003-07-16 03:57) [7]

попробуй вот так отладить

begin
FindHandle:=FindFirstFile(PAnsiChar(StartDir_+"\*.*"),FindData);
Result_:=true;
while (result_<>false) and (FindHandle<>INVALID_HANDLE_VALUE) do

Желаю успехов


 
Rouse_ ©   (2003-07-16 03:58) [8]

ой Сори чуть выше вырезал код
Вот так смри

while (result_<>false) and (FindHandle<>INVALID_HANDLE_VALUE) do
begin
f.Lines.Add(StartDir_+"\"+StrPas(FindData.cFileName));

Там все виднее будет

Желаю успехов


 
ЮЮ ©   (2003-07-16 05:26) [9]

Наверное, некорректно использовать прямое сравнение атрибутов
FindData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY,
т.к. возможно наличие не одного, а нескольких сразу,
правильней будет
FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY,




 
Anatoly Podgoretsky ©   (2003-07-16 08:01) [10]

А чего удивляться, прямое сравнение аттрибутов, вместо сравнения флагов. Пример от Theoden (16.07.03 02:58) грешит тем же абсурдом.

if (sr.Attr and faDirectory) = faDirectory then else


 
Bosh ©   (2003-07-17 04:23) [11]

да именно в прямом сравнении аттрибутов ошибка была
Все БОЛЬШОЕ СПАСИБО!!



Страницы: 1 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-100714
Endi
2003-07-18 15:35
2003.07.31
Определние, что поступило сообщение


8-100835
XmPL
2003-04-09 13:44
2003.07.31
Как перевести 32-, 24-, 16/15-битное изображение


14-100888
Yuraz
2003-07-16 13:58
2003.07.31
Как узнать, есть ли пересечение фигур? Известны координаты.


14-100944
Крот
2003-07-15 11:36
2003.07.31
Ming для Flash


1-100771
marconi
2003-07-15 23:38
2003.07.31
Все тот же СтрингГрид