powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск фала с последней датой создания
19 сообщений из 44, страница 2 из 2
Поиск фала с последней датой создания
    #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
19 сообщений из 44, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск фала с последней датой создания
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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