powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск фала с последней датой создания
44 сообщений из 44, показаны все 2 страниц
Поиск фала с последней датой создания
    #33805493
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В катаалоге есть файлы типа price_20_06_2006.xls или price_2006_06_02.xls, ну и другие в таком роде - т.е. все вида priceххххххх.xls А нужно перебрав все определить тот, что "СВЕЖЕЕ"
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805555
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как пробовал, что не получилось ?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805714
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да как. Беру FindFirst рекурсивно кручу и заганяю результаты в грид. Затем шерстим по гриду и выбираем файл с наибольшей датой. Но потом подумал, что зачем с гридом возиться. Просто нужно искомое определять при переборе -ведь мне нужен только 1 файл!
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805728
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно мыслишь - сделай без грида

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805813
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
//#include "Masks.hpp"
AnsiString FFind(AnsiString StartFolder, AnsiString Mask, bool ScanSubFolders)
{ 
 TSearchRec SR;
 int FindResult;
 AnsiString Result = "";
 int fa;
 TDateTime dt = EncodeDate( 2000 , 1 , 1 );

  StartFolder = IncludeTrailingBackslash(StartFolder);
  FindResult = FindFirst(StartFolder+"*.*", faAnyFile, SR);

   while (FindResult ==  0 )
   {
      if ((SR.Attr & faDirectory) !=  0 )
      {
       if (ScanSubFolders && (SR.Name != ".") && (SR.Name != ".."))
       FFind(StartFolder+SR.Name, Mask, ScanSubFolders);
      }
      else
      {
       if ((MatchesMask(SR.Name, Mask))&&(FileDateToDateTime(FileAge(StartFolder + SR.Name)) > dt))
       Result = StartFolder + SR.Name;
      }
     FindResult = FindNext(SR);
    }

  FindClose(SR);

 return Result;
}

Вот то что создал, но чего-то не тот файл выдает ...
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805910
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z
ты на паскале пишешь что ли ? :)

я бы так написал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void FindDir(AnsiString StartFolder, AnsiString Mask, int
&MaxTime, AnsiString &MaxFileName)
{
  StartFolder=IncludeTrailingBackslash(StartFolder);
  TSearchRec sr;
  for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
  {
    if ((sr.Attr & faDirectory) && ScanSubFolders)
FindDir(StartFolder+sr.Name,Mask,MaxDate,MaxFileName);
    else
    {
      if (MatchesMask(sr.Name, Mask) && sr.Time > MaxTime) MaxFileName =
StartFolder + sr.Name;
    }
  }
  FindClose(sr);
}

AnsiString FFind(AnsiString StartFolder, AnsiString Mask, bool
ScanSubFolders)
{
  AnsiString MaxFileName;
  int MaxTime=DateTimeToFileDate(EncodeDate( 2000 , 1 , 1 ));

  FindDir(IncludeTrailingBackslash(StartFolder),Mask,MaxDate,MaxFileName);

  return MaxFileName;
}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33805915
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, Outlook все перенес :(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
void FindDir(AnsiString StartFolder, AnsiString Mask, int &MaxTime, AnsiString &MaxFileName)
{
  StartFolder=IncludeTrailingBackslash(StartFolder);
  TSearchRec sr;
  for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
  {
    if ((sr.Attr & faDirectory) && ScanSubFolders) FindDir(StartFolder+sr.Name,Mask,MaxDate,MaxFileName);
    else
    {
      if (MatchesMask(sr.Name, Mask) && sr.Time > MaxTime) MaxFileName = StartFolder + sr.Name;
    }
  }
  FindClose(sr);
}
 
AnsiString FFind(AnsiString StartFolder, AnsiString Mask, bool
ScanSubFolders)
{
  AnsiString MaxFileName;
  int MaxTime=DateTimeToFileDate(EncodeDate( 2000 , 1 , 1 ));
 
  FindDir(IncludeTrailingBackslash(StartFolder),Mask,MaxDate,MaxFileName);
 
  return MaxFileName;
}
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806001
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабасты на паскале пишешь что ли ? :)
Дак это же я - ну типа перешел с Delphi на C. Думаю так же, а пишу другими
буквами. А последний твой код сейчас проверим.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806068
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
 if ((sr.Attr & faDirectory) && ScanSubFolders)
,
а как там с объявлением ScanSubFolders в FindDir ? И что нужно 2 ф-и,
чтобы сработало задуманное?
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806079
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасБлин, Outlook все перенес :(

[src c++]void FindDir(AnsiString StartFolder, AnsiString Mask, int &MaxTime, AnsiString &MaxFileName)
{
StartFolder=IncludeTrailingBackslash(StartFolder);
TSearchRec sr;
for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
{
if ((sr.Attr & faDirectory) && ScanSubFolders) FindDir(StartFolder+sr.Name,Mask,MaxDate,MaxFileName);
else
{
if (MatchesMask(sr.Name, Mask) && sr.Time > MaxTime) MaxFileName = StartFolder + sr.Name;
}
}
FindClose(sr);
}

src]

MaxTime == MaxDate :)
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806097
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Zнужно 2 ф-и, чтобы сработало задуманное?
ну у тебя рекурсивная функция возвращает значение ... мне кажется, удобнее
вызвать ее отдельно

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806098
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION ZMaxTime == MaxDate :)
писал "из мозга", не проверял :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806110
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дает тот же результат, что и моя. Т.е. выдает файл не самой последней даты!
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806131
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружилось, что ф-я в результате выдает последний файл перебора, а не файл с последней датой. Что там поповоду && sr.Time > MaxTime - почему не работает?
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806147
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, пришлось запустить "стройку" :))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
void FindDir(AnsiString StartFolder, AnsiString Mask, int &MaxTime, AnsiString &MaxFileName, bool ScanSubFolders)
{
  StartFolder=IncludeTrailingBackslash(StartFolder);
  TSearchRec sr;
  for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
  {
    if ((sr.Attr & faDirectory) && ScanSubFolders) FindDir(StartFolder+sr.Name,Mask,MaxTime,MaxFileName,ScanSubFolders);
    else
    {
      if (MatchesMask(sr.Name, Mask) && sr.Time > MaxTime)
      {
        MaxFileName = StartFolder + sr.Name;
        MaxTime= sr.Time;
      }
    }
  }
  FindClose(sr);
}

AnsiString FFind(AnsiString StartFolder, AnsiString Mask, bool ScanSubFolders)
{
  AnsiString MaxFileName;
  int MaxTime=DateTimeToFileDate(EncodeDate( 2000 , 1 , 1 ));

  FindDir(IncludeTrailingBackslash(StartFolder),Mask,MaxTime,MaxFileName, ScanSubFolders);

  return MaxFileName;
}
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806488
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин у нас провайдер целый час на профилактике был. И в принципе я уже и сам сделал - типа по паскалевским мотивам:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
//Run
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString SRCDir = "D:\\WORK\\";
 AnsiString fmask =  "price*.xls";
 int MaxTime = DateTimeToFileDate(EncodeDate( 2000 , 1 , 1 ));
 AnsiString st = FFind(IncludeTrailingBackslash(SRCDir), fmask, false,MaxTime);
 ...
}

//Сам поиск
AnsiString FFind(AnsiString StartFolder, AnsiString Mask, bool ScanSubFolders, int &MaxTime)
{ 
 TSearchRec SR;
 int FindResult;
 AnsiString Result = "";

  FindResult = FindFirst(StartFolder+"*.*", faAnyFile, SR);

   while (FindResult ==  0 )
   {
      if ((SR.Attr & faDirectory) !=  0 )
      {
       if (ScanSubFolders && (SR.Name != ".") && (SR.Name != ".."))
       FFind(StartFolder+SR.Name, Mask, ScanSubFolders, MaxTime);
      }
      else
      {
       if ((MatchesMask(SR.Name, Mask))&&(SR.Time > MaxTime))
       {
        MaxTime = SR.Time;
        Result = StartFolder + SR.Name;
       }
      }
     FindResult = FindNext(SR);
   }

  FindClose(SR);

 return Result;
}

Но смотрю и твой код изменился ...
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806606
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно чуть проще проверять только дату создания, а не анализировать имя файла.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806640
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то только не работает поиск в SubFolders, а твой вообще в цикле!
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806646
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Zвообще в цикле
кто в цикле ?
на этот раз я все проверил - работает

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806669
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
niknameВозможно чуть проще проверять только дату создания, а не анализировать имя файла.
А на счет этого скажу, что в каталоге полно ещё всякого бреда. А нужен последний и з заданной маски.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806676
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас
кто в цикле ?
на этот раз я все проверил - работает

В цикле поик в SubFolders, т.е. когда ScanSubFolders = 1
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806694
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION ZВ цикле поик в SubFolders, т.е. когда ScanSubFolders =
1
а ну дак там надо вот так:
Код: plaintext
1.
2.
3.
4.
5.
    if ((sr.Attr & faDirectory) && ScanSubFolders)
    {
      if (sr.Name!="." && sr.Name!="..")
FindDir(StartFolder+sr.Name,Mask,MaxTime,MaxFileName,ScanSubFolders);
    }

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806698
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять аутлук перенес ... ну да разберешься

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806718
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас
а ну дак там надо вот так:
Код: plaintext
1.
2.
3.
4.
5.
    if ((sr.Attr & faDirectory) && ScanSubFolders)
    {
      if (sr.Name!="." && sr.Name!="..")
FindDir(StartFolder+sr.Name,Mask,MaxTime,MaxFileName,ScanSubFolders);
    }

Posted via ActualForum NNTP Server 1.3

А теперь как и уменя не выполняется поиск в SubFolders - т.е. при обнаружении подкаталога обход вываливается.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806744
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рекурсия прекращается т.к. при рекурсивном вызове поиска в подкаталоге StartFolder+sr.Name = "" - NULL!
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806776
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		struct _finddata_t c_file;
		hFile = _findfirst( szMyFileMask, &c_file );
		time_t maxDt = 0L;
		CString sFileName;
		if ( hFile != - 1  ){
			do
			{
				if ( c_file.time_create > dt )){
					dt = c_file.time_create;
					sFileName = c_file.name;
				}
			}while(!_findnext(hFile,&c_file) );
			_findclose(hFile);
		}

time_t time_create 
 Time of file creation ( –1L for FAT file systems). 
time_t time_access 
 Time of last file access (–1L for FAT file systems). 
time_t time_write 
 Time of last write to file. 
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806777
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если делаю обычный поиск файлов по маске, то в подкаталоге ищет.
Ну типа вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
//Поиск 
void FFind0(AnsiString StartFolder, AnsiString Mask, bool ScanSubFolders)
{ 
 TSearchRec SR;
 int FindResult;

  StartFolder = IncludeTrailingBackslash(StartFolder);
  FindResult = FindFirst(StartFolder+"*.*", faAnyFile, SR);

    while (FindResult ==  0 )
   {
      if ((SR.Attr & faDirectory) !=  0 )
      {
       if (ScanSubFolders && (SR.Name != ".") && (SR.Name != ".."))
       FFind0(StartFolder+SR.Name, Mask, ScanSubFolders);
      }
      else
      {
       if (MatchesMask(SR.Name, Mask)) ShowMessage(StartFolder+SR.Name);
      }
     FindResult = FindNext(SR);
    }
   FindClose(SR);
}

//Run
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString SRCDir = "D:\\WORK\\";
 AnsiString fmask =  "price*.xls";
 FFind0(SRCDir, fmask, true);
}

Ну ShowMessage(StartFolder+SR.Name); - это так для пробы, а не красоты
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806786
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nikname
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		struct _finddata_t c_file;
		hFile = _findfirst( szMyFileMask, &c_file );
		time_t maxDt = 0L;
		CString sFileName;
		if ( hFile != - 1  ){
			do
			{
				if ( c_file.time_create > dt )){
					dt = c_file.time_create;
					sFileName = c_file.name;
				}
			}while(!_findnext(hFile,&c_file) );
			_findclose(hFile);
		}

time_t time_create 
 Time of file creation ( –1L for FAT file systems). 
time_t time_access 
 Time of last file access (–1L for FAT file systems). 
time_t time_write 
 Time of last write to file. 


Да программеры, а особенно сишники очень лаконичны, но чтоб на столько
чтоб комментарий не вставить ... мы же на ФОРУМЕ
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806816
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z
SZ> Рекурсия прекращается т.к. при рекурсивном вызове поиска
SZ> в подкаталоге StartFolder+sr.Name = "" - NULL! Тема

что-то ты врешь или путаешь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void FindDir(AnsiString StartFolder, AnsiString Mask, int &MaxTime,
AnsiString &MaxFileName, bool ScanSubFolders)
{
  StartFolder=IncludeTrailingBackslash(StartFolder);
  ConsoleOut( 0 ,StartFolder+"\r\n");
  TSearchRec sr;
  for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
выводит:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
W:\Фотографии\Наши\Цифровые\
W:\Фотографии\Наши\Цифровые\111111\
W:\Фотографии\Наши\Цифровые\123\
W:\Фотографии\Наши\Цифровые\123\10050905\
W:\Фотографии\Наши\Цифровые\123\10050907\
W:\Фотографии\Наши\Цифровые\123\10050908\
W:\Фотографии\Наши\Цифровые\123\10050909\
W:\Фотографии\Наши\Цифровые\123\10050910\
W:\Фотографии\Наши\Цифровые\123\10050911\
W:\Фотографии\Наши\Цифровые\123\10050913\
W:\Фотографии\Наши\Цифровые\123\10050914\
W:\Фотографии\Наши\Цифровые\2005.08.26\
так что все в порядке

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33806833
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SCORPION Z

Да программеры, а особенно сишники очень лаконичны, но чтоб на столько
чтоб комментарий не вставить ... мы же на ФОРУМЕ
Я имел в виду следующее:
1. судя по условиям перебор подкаталогов не нужен
2. Если операционка не FAT то последний файл можно найти по маске \\path...\\price*.xls и дате создания, что очевидно эффективнее, чем разбирать имя файла вручную
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807778
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
niknameЯ имел в виду следующее:
1. судя по условиям перебор подкаталогов не нужен
...
Не нужно, но сделаю
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807803
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас
что-то ты врешь или путаешь

Сейчас ещё раз проверим. А что такое ConsoleOut - это не win32 api, а что же ? !
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807822
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION ZА что такое ConsoleOut
да просто вывод на консоль, функция-то пустяковая, а для отладки полезно,
сам напиши

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807836
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас
W:\Фотографии\Наши\Цифровые\
W:\Фотографии\Наши\Цифровые\111111\
W:\Фотографии\Наши\Цифровые\123\
...
так что все в порядке

Опять Вы Карабас сделали НЕполную проверку. ДА в подкаталоги действительно заглядывает, НО при встрече файла из "маски" - ничего
не находит. Давай выясним истину с использованием каких-то файлов. Я думаю это не сложно проветиь...
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807888
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION ZДавай выясним истину с использованием каких-то файлов
вставил еще вывод на консоль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
void FindDir(AnsiString StartFolder, AnsiString Mask, int &MaxTime, AnsiString &MaxFileName, bool ScanSubFolders)
{
  StartFolder=IncludeTrailingBackslash(StartFolder);

  TSearchRec sr;
  for(bool r=FindFirst(StartFolder+"*.*", faAnyFile, sr);!r;r=FindNext(sr))
  {
    if ((sr.Attr & faDirectory) && ScanSubFolders)
    {
      if (sr.Name!="." && sr.Name!="..") FindDir(StartFolder+sr.Name,Mask,MaxTime,MaxFileName,ScanSubFolders);
    }
    else
    {
      ConsoleOut( 0 ,StartFolder+sr.Name);
      if (MatchesMask(sr.Name, Mask))
      {
        ConsoleOut( 0 ," *.jpg");
        if (sr.Time > MaxTime)
        {
          MaxFileName = StartFolder + sr.Name;
          MaxTime= sr.Time;
          ConsoleOut( 0 ," saved");
        }
        else
        {
          ConsoleOut( 0 ," MaxTime="+IntToStr(MaxTime)+", sr.Time="+IntToStr(sr.Time));
        }
      }
      ConsoleOut( 0 ,"\r\n");
    }
  }
  FindClose(sr);
}
результат (фрагмент):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
W:\Фотографии\Наши\Цифровые\20060618\PICT7760.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7761.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7762.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7763.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7764.JPG *.jpg MaxTime=886215830, sr.Time=886215830
W:\Фотографии\Наши\Цифровые\20060618\PICT7765.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7766.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7767.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7768.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7769.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7770.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7771.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7772.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7774.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7775.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7776.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7777.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7778.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7779.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7784.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7786.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7787.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7788.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7843.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7848.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7853.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7854.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7855.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7856.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7865.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\PICT7869.JPG *.jpg saved
W:\Фотографии\Наши\Цифровые\20060618\Thumbs.db
W:\Фотографии\Наши\Цифровые\ekamama\PICT5099.JPG *.jpg MaxTime=886224114, sr.Time=865560892
W:\Фотографии\Наши\Цифровые\ekamama\PICT5101.JPG *.jpg MaxTime=886224114, sr.Time=865560869
W:\Фотографии\Наши\Цифровые\ekamama\PICT5107x_filtered.jpg *.jpg MaxTime=886224114, sr.Time=865538891
W:\Фотографии\Наши\Цифровые\ekamama\PICT5108_filtered.jpg *.jpg MaxTime=886224114, sr.Time=865538929
W:\Фотографии\Наши\Цифровые\ekamama\PICT5109_filtered.jpg *.jpg MaxTime=886224114, sr.Time=865538968
W:\Фотографии\Наши\Цифровые\ekamama\PICT5115_filtered.jpg *.jpg MaxTime=886224114, sr.Time=865560944
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33807988
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно согласен, что ф-я находит файлы по маске и даже правильно определает maxfile, только вот у меня в момент присвоения
AnsiString st = FFind(SRCDir, fmask, true, MaxTime); выдает st == "", а в твоей должен признать дает правильный ответ. Неужели нужно сделать мою ф-ю как void , а передавать результат как AnsiString &MaxFileName И действительно сделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
//Вызов
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString SRCDir = "D:\\WORK\\";
 AnsiString fmask =  "price*.xls";
 int MaxTime = DateTimeToFileDate(EncodeDate( 2000 , 1 , 1 ));
 AnsiString MaxFileName;

 FFind(SRCDir, fmask, true, MaxTime, MaxFileName);
 //ShowMessage(MaxFileName);
} 

//Поиск файлов в каталога StartFolder по маске Mask.
void FFind1(AnsiString StartFolder, AnsiString Mask, bool ScanSubFolders, int &MaxTime, AnsiString &MaxFileName)
{
 TSearchRec SR;
 int FindResult;

  StartFolder=IncludeTrailingBackslash(StartFolder);
  FindResult = FindFirst(StartFolder+"*.*", faAnyFile, SR);

   while (FindResult ==  0 )
   {
      if ((SR.Attr & faDirectory) !=  0 )
      {
       if (ScanSubFolders && (SR.Name != ".") && (SR.Name != ".."))
       FFind1(StartFolder+SR.Name, Mask, ScanSubFolders, MaxTime, MaxFileName);
      }
      else if ((MatchesMask(SR.Name, Mask))&&(SR.Time > MaxTime))
      {
        MaxTime = SR.Time;
        MaxFileName = StartFolder + SR.Name;
      }
     FindResult = FindNext(SR);
   }
  FindClose(SR);
}

А так работает
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33808066
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCORPION Z
я ж тебе говорил - у тебя рекурсивная функция, возвращающая результат, у
нее в каждой рекурсии свой результат
надо либо учитывать это в верхних уронях рекурсии, либо делать, как сделал
я - т.е. завести внешнюю для функции переменную, которую менять только в
нужных случаях

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33808072
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не столько головной боли по алгоритму, сколько по передаче параметров ...
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33808373
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас
SCORPION Z
я ж тебе говорил - у тебя рекурсивная функция, возвращающая результат, у
нее в каждой рекурсии свой результат
надо либо учитывать это в верхних уронях рекурсии, либо делать, как сделал
я - т.е. завести внешнюю для функции переменную, которую менять только в
нужных случаях

Истину говоришь! Тема закрыта.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33834843
AndrewKol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой: в структуре _finddata_t атрибут attrib для файлов =32 а для папок =16?
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33834912
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewKolВопрос такой: в структуре _finddata_t атрибут attrib для файлов =32 а для папок =16?

io.h
/* File attribute constants for _findfirst() */

#define _A_NORMAL 0x00 /* Normal file - No read/write restrictions */
#define _A_RDONLY 0x01 /* Read only file */
#define _A_HIDDEN 0x02 /* Hidden file */
#define _A_SYSTEM 0x04 /* System file */
#define _A_SUBDIR 0x10 /* Subdirectory */
#define _A_ARCH 0x20 /* Archive file */


Проверяй 4-й бит (с нуля)
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33835158
AndrewKol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh AndrewKolВопрос такой: в структуре _finddata_t атрибут attrib для файлов =32 а для папок =16?
Проверяй 4-й бит (с нуля)
Спасибо. Задача несколько сложнее перебрать все файлы в папке, включая подпапки.
void all_files(CString dir)
{
...
cout<<Full _path_to_file<<endl;
...
}
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33835193
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewKolСпасибо. Задача несколько сложнее перебрать все файлы в папке, включая подпапки.
void all_files(CString dir)
{
...
cout<<Full _path_to_file<<endl;
...
}

Тут же ее решили. Даже тему закрыли.
...
Рейтинг: 0 / 0
Поиск фала с последней датой создания
    #33835275
AndrewKol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh AndrewKolСпасибо. Задача несколько сложнее перебрать все файлы в папке, включая подпапки.
void all_files(CString dir)
{
...
cout<<Full _path_to_file<<endl;
...
}

Тут же ее решили. Даже тему закрыли.
1)На сколько я понял это не есть код для MSVS7 буду переделывать
2)мне нужны просто все файлы
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск фала с последней датой создания
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]