Форум: "Основная";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Внизстранный обход каталогов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c