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

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.06.2006, 14:52
    #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
21.06.2006, 15:07
    #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
21.06.2006, 15:09
    #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
21.06.2006, 15:30
    #33806001
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Карабас Барабасты на паскале пишешь что ли ? :)
Дак это же я - ну типа перешел с Delphi на C. Думаю так же, а пишу другими
буквами. А последний твой код сейчас проверим.
...
Рейтинг: 0 / 0
21.06.2006, 15:40
    #33806068
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Код: plaintext
 if ((sr.Attr & faDirectory) && ScanSubFolders)
,
а как там с объявлением ScanSubFolders в FindDir ? И что нужно 2 ф-и,
чтобы сработало задуманное?
...
Рейтинг: 0 / 0
21.06.2006, 15:42
    #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
21.06.2006, 15:46
    #33806097
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
SCORPION Zнужно 2 ф-и, чтобы сработало задуманное?
ну у тебя рекурсивная функция возвращает значение ... мне кажется, удобнее
вызвать ее отдельно

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.06.2006, 15:49
    #33806110
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Дает тот же результат, что и моя. Т.е. выдает файл не самой последней даты!
...
Рейтинг: 0 / 0
21.06.2006, 15:54
    #33806131
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Обнаружилось, что ф-я в результате выдает последний файл перебора, а не файл с последней датой. Что там поповоду && sr.Time > MaxTime - почему не работает?
...
Рейтинг: 0 / 0
21.06.2006, 15:58
    #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
21.06.2006, 17:25
    #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
21.06.2006, 17:54
    #33806606
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Возможно чуть проще проверять только дату создания, а не анализировать имя файла.
...
Рейтинг: 0 / 0
21.06.2006, 18:05
    #33806640
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Что то только не работает поиск в SubFolders, а твой вообще в цикле!
...
Рейтинг: 0 / 0
21.06.2006, 18:06
    #33806646
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
SCORPION Zвообще в цикле
кто в цикле ?
на этот раз я все проверил - работает

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

В цикле поик в SubFolders, т.е. когда ScanSubFolders = 1
...
Рейтинг: 0 / 0
21.06.2006, 18:20
    #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
21.06.2006, 18:21
    #33806698
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Опять аутлук перенес ... ну да разберешься

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.06.2006, 18:29
    #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
21.06.2006, 18:39
    #33806744
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск фала с последней датой создания
Рекурсия прекращается т.к. при рекурсивном вызове поиска в подкаталоге StartFolder+sr.Name = "" - NULL!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск фала с последней датой создания / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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