powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск файла в директории
17 сообщений из 17, страница 1 из 1
Поиск файла в директории
    #39905299
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая проблема: есть 2 папки, программа должна найти самый новый файл из первой папки и сравнить с самым новым файлом из второй папки. Но такая беда если такого файла нет, то прога зацикливается и если даже подкинуть во вторую папку новый файл то почему то условие не срабатывает, как будто программа не увидела нового(подкинутого) файла. Как можно сделать во втором TRY так чтобы было зацикливание, т.е. чтобы при появлении нового файла программа его увидела. Как то так. Я потом могу поставить задержку sleep(1000) чтобы сильно не грузить проц.
Код: pascal
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.
try
    if FindFirst(file1+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
      ft := SystemTimeToDateTime(st);
      if ft > dt then
      begin
        dt := ft;
        fil1 := sr.Name;
      end;
    until (FindNext(sr) <> 0);
  finally
    FindClose(sr);
  end;
//ShowMessage(fil1);
x:=fil1[12]+fil1[13]+fil1[15]+fil1[16];
i:=StrToInt(x);
//ShowMessage(IntToStr(i));

dt := 0;
try
    if FindFirst(file2+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
      ft := SystemTimeToDateTime(st);
      if ft > dt then
      begin
        dt := ft;
        fil2 := sr.Name;
      end;
      y:=fil2[12]+fil2[13]+fil2[15]+fil2[16];
      j:=StrToInt(y);
//      ShowMessage(IntToStr(j));
    until (FindNext(sr) <> 0) and (j>=i);
  finally
    ShowMessage('Файл найден');
    FindClose(sr);
  end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905304
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcher
(FindNext(sr) <> 0) and (j>=i)

Может OR поможет?
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905307
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcher, просто лучше, вы принципиально не пользуетесь кнопкой SRC, чтобы код получился форматированным?

Представленный код нужно менять: инициализация переменной sr происходит вне цикла.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905317
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcher

Код: pascal
1.
2.
3.
4.
5.
try
    if FindFirst(file1+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);





Код: pascal
1.
2.
3.
4.
5.
try
    if FindFirst(file1+'\*.*', faAnyFile - faDirectory , sr) = 0 then
    repeat
      // if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905335
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот код кажется из официальной справки по делфи.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905336
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45
Delphi_Watcher, просто лучше, вы принципиально не пользуетесь кнопкой SRC, чтобы код получился форматированным?

Да я незнал про это.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905341
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Квейд
Delphi_Watcher

Код: pascal
1.
2.
3.
4.
5.
try
    if FindFirst(file1+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);





Код: pascal
1.
2.
3.
4.
5.
try
    if FindFirst(file1+'\*.*', faAnyFile - faDirectory , sr) = 0 then
    repeat
      // if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);


Это не помогло.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905384
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грубо говоря у меня в i хранится время последнего файла из папки 1 а в j время последнего файла из папки 2.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905390
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо либо совсем убрать условие (j>=i) из второго цикла, либо вынести его во внешний цикл (до FindFirst).
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905393
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcher
Грубо говоря у меня в i хранится время последнего файла из папки 1 а в j время последнего файла из папки 2.

Код: pascal
1.
2.
3.
4.
    fil2 := sr.Name;
  end;
  y:=fil2[12]+fil2[13]+fil2[15]+fil2[16];
  j:=StrToInt(y);


Я не знаю что у вас в j хранится, но это точно не время.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905397
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp
Надо либо совсем убрать условие (j>=i) из второго цикла, либо вынести его во внешний цикл (до FindFirst).

Вынести его во внешний цикл (до FindFirst) не получится, в цикле я получаю последний файл, его время (fil2 := sr.Name;).
Убрать тоже не вариант, тогда зацикливание не работает, при подкидывании нужного файла ничего не происходит.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905399
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так сработает...
Код: pascal
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.
var dt1: TDateTime;
begin
  dt1 := MyFindFile(file1);
  while MyFindFile(file2) <= dt1 do
  begin
    Sleep(1000);
  end;
end;

function MyFindFile(aPath: string): TDateTime
var
  ft: TDateTime;
  sr: TSearchRec;
  st: _SYSTEMTIME;
  fil1: string;
begin
  try
    Result := 0;
    if FindFirst(apath+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
      ft := SystemTimeToDateTime(st);
      if ft > Result then
      begin
        Result := ft;
        fil1 := sr.Name;
      end;
    until (FindNext(sr) <> 0);
  finally
    FindClose(sr);
  end;
end;
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905415
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45
Может так сработает...
Код: pascal
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.
var dt1: TDateTime;
begin
  dt1 := MyFindFile(file1);
  while MyFindFile(file2) <= dt1 do
  begin
    Sleep(1000);
  end;
end;

function MyFindFile(aPath: string): TDateTime
var
  ft: TDateTime;
  sr: TSearchRec;
  st: _SYSTEMTIME;
  fil1: string;
begin
  try
    Result := 0;
    if FindFirst(apath+'\*.*', faAnyFile, sr) = 0 then
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
      ft := SystemTimeToDateTime(st);
      if ft > Result then
      begin
        Result := ft;
        fil1 := sr.Name;
      end;
    until (FindNext(sr) <> 0);
  finally
    FindClose(sr);
  end;
end;


Я тоже думал про while, только вот куда его присобачить. А данный способ незнаю, мне тут полкода придется переделать((
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905417
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, тут программист нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905462
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function MyFindFile(aPath: string): TDateTime
var
  ft: TDateTime;
  sr: TSearchRec;
  st: _SYSTEMTIME;
  fil1: string;
begin
  Result := 0;
  if FindFirst(apath+'\*.*', faAnyFile, sr) = 0 then
  try
    repeat
      if sr.Attr = faDirectory then Continue;
      FileTimeToSystemTime(sr.FindData.ftCreationTime, st);
      ft := SystemTimeToDateTime(st);
      if ft > Result then
      begin
        Result := ft;
        fil1 := sr.Name;
      end;
    until (FindNext(sr) <> 0);
  finally
    FindClose(sr);
  end;
end;


Иначе FindClose будет вызван в случае неудачи FindFirst тоже.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905475
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, согласен.
...
Рейтинг: 0 / 0
Поиск файла в директории
    #39905932
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, вроде получилось у меня.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск файла в директории
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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