Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
3-100641
XanderMan
2003-07-10 16:09
2003.07.31
Oracle Server и Client на одной машине


1-100662
ray_w
2003-07-15 09:51
2003.07.31
Событие при наведении курсора


1-100738
Aleksei
2003-07-15 18:13
2003.07.31
Delphi & Excel


11-100656
Arch-vile
2002-11-24 22:29
2003.07.31
randomfrom


14-100913
sagchat
2003-07-13 16:39
2003.07.31
Помогите выбрать видюху





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