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


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