TSearchRec SR;
TStringList * Find;
try{
if(FindFirst(Dir+"*.*",faAnyFile+faDirectory,SR)!=0) return;
Find = new TStringList; //Если ничего нет - нет смысла создавать список
do{
//тут все
}while(FindNext(SR)==0)
}
__finally{
if(Find) delete Find;
FindClose(SR);
}
Поиск файлов
Прошу помочь с одной проблемой, в общем нужно организовать поиск файла на диске, в начальном каталоге мой код файл находит, делаю рекурсивный вызов функции для поиска в папках искомого файла, не работает, в чем проблема не могу разобраться, подскажите пожалуйста.
мой код:
Код:
void TService1::Findses(AnsiString Files, AnsiString Dir)
{
TSearchRec SR;
TStringList * Find = new TStringList();
Find->Clear();
// задание условий поиска и начало поиска
if(FindFirst(Dir+Files,faAnyFile+faDirectory,SR)==0)
{
do
{
if(SR.Attr & faDirectory) //проверяю, папка ли это
{
if(SR.Name==".")//проверяю корректность ее имени
{
}
if(SR.Name=="..")//проверяю корректность ее имени
{
}
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else
{
Find->Add(Dir+"\n"+SR.Name);
if(SR.Name!="")
{
Find->SaveToFile(dl+":\\save.txt");
}
}
}
while (FindNext(SR) == 0);
FindClose(SR);
delete Find;
}
}
{
TSearchRec SR;
TStringList * Find = new TStringList();
Find->Clear();
// задание условий поиска и начало поиска
if(FindFirst(Dir+Files,faAnyFile+faDirectory,SR)==0)
{
do
{
if(SR.Attr & faDirectory) //проверяю, папка ли это
{
if(SR.Name==".")//проверяю корректность ее имени
{
}
if(SR.Name=="..")//проверяю корректность ее имени
{
}
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else
{
Find->Add(Dir+"\n"+SR.Name);
if(SR.Name!="")
{
Find->SaveToFile(dl+":\\save.txt");
}
}
}
while (FindNext(SR) == 0);
FindClose(SR);
delete Find;
}
}
Код:
if(SR.Attr & faDirectory && (SR.Name!="." && SR.Name!="..")) //если нашли папку, то проверяем что это не ссылка на текущий или родительский каталог
{
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else if(SR.Name=="." || SR.Name=="..") continue;//это ссылка на текущий или родительский каталог
else{
Find->Add(Dir+"\n"+SR.Name);
if(SR.Name!="")
{
Find->SaveToFile(dl+":\\save.txt");
}
}
{
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else if(SR.Name=="." || SR.Name=="..") continue;//это ссылка на текущий или родительский каталог
else{
Find->Add(Dir+"\n"+SR.Name);
if(SR.Name!="")
{
Find->SaveToFile(dl+":\\save.txt");
}
}
Код:
if(FindFirst(Dir+"*.*",faAnyFile+faDirectory,SR)==0){
do{
if(SR.Attr & faDirectory && (SR.Name!="." && SR.Name!="..")) //если нашли папку, то проверяем что это не ссылка на текущий или родительский каталог
{
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else if(SR.Name=="." || SR.Name=="..") continue;//это ссылка на текущий или родительский каталог
else{
if(SR.Name.Pos(Files) > 0)
Find->Add(Dir+"\n"+SR.Name);
Find->SaveToFile(dl+":\\save.txt");
}
}while(FindNext(SR)==0)
}
do{
if(SR.Attr & faDirectory && (SR.Name!="." && SR.Name!="..")) //если нашли папку, то проверяем что это не ссылка на текущий или родительский каталог
{
Findses(Files,Dir+SR.Name+"\\");//собственно рекурсивный запрос, добавляю к искомому каталогу
//новый найденный каталог и повторяю выполнение поиска
}
else if(SR.Name=="." || SR.Name=="..") continue;//это ссылка на текущий или родительский каталог
else{
if(SR.Name.Pos(Files) > 0)
Find->Add(Dir+"\n"+SR.Name);
Find->SaveToFile(dl+":\\save.txt");
}
}while(FindNext(SR)==0)
}
Код:
string path = "D:\\Temp";
List<string> Dirs = new List<string>(Directory.EnumerateDirectories(path,"*",SearchOption.AllDirectories));
string name = "Temp.txt";
string res = string.Empty;
foreach (string dir in Dirs)
{
DirectoryInfo Info = new DirectoryInfo(dir);
IEnumerable<FileInfo> Files = from f in Info.EnumerateFiles()
where f.Name == name
select f;
foreach (FileInfo f in Files)
{
res += f.FullName + "\n";
}
}
MessageBox.Show(res);
List<string> Dirs = new List<string>(Directory.EnumerateDirectories(path,"*",SearchOption.AllDirectories));
string name = "Temp.txt";
string res = string.Empty;
foreach (string dir in Dirs)
{
DirectoryInfo Info = new DirectoryInfo(dir);
IEnumerable<FileInfo> Files = from f in Info.EnumerateFiles()
where f.Name == name
select f;
foreach (FileInfo f in Files)
{
res += f.FullName + "\n";
}
}
MessageBox.Show(res);
Цитата: kot_
Т.е. если директории ей не сосуществуют...
не соответствуют конечно же имелось ввиду
Спасибо, все дошло до меня) с температурой как то не очень кодится)
Код: