Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Посылка файла по маске


Автор: VAMPiRE69 6.2.2006, 17:39
У меня такое ощущение, что этот вопрос будет больше относится к работе с файлами, но всё же...

Ситуация такая:
Есть мой удалённый ФТП, на него отправляются файлы. Всё налаженно, всё работает и отсылается. Через Indy. Но очень неудобно то, что заведомо неизвестно, как файл будет называться, известно только то что он скорее всего будет один в папке и его расширение будет *.dat
В общем, мне надо так, чтобы из конкретной папки на компе юзера на мой ФТП слались файлы с расширением *.dat (имена файлов не известны).
Скорее всего это один файл и было бы просто супер, чтобы получить всего одну строчку вида string, в который был бы полный путь до dat файла в конкретной папке.

Вот, собственно, и вся моя проблема. Заранее благодарен!

Автор: _hunter 6.2.2006, 17:50
в чем проблема так и не понял.
найти файл в папке по маске? -- FindFirst/FindNext

Автор: VAMPiRE69 6.2.2006, 18:13
Вот у меня и была проблема, что я плохо умею обращаться с этими фенкциями. Хотя щас по яндексу полазил, вроде разобрался. Этот код отчасти помог:
Код

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Поиск файлов по маске по всему дереву каталогов, начиная с указанного

Продедура производит фалов по маске в указанном и во всех его вложенных
каталогах.

Параметр StartFolder указывает на начальный каталог поиска,

параметр Mask указывает маску поиска (например '*.pas'),

параметр List указывает на список строк, в которых будут записаны
результаты поиска,

Необязательный параметр ScanSubFolders указывает на необходимость
поиска во вложенных подкаталогах.

Зависимости: Windows, SysUtils, Classes, Masks
***************************************************** }

procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              List.Add(StartFolder + Name);
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;

Пример использования:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindFiles('C:\Program Files\', '*.exe', memo1.Lines, true);
end;

Извиняюсь, я и сам понял, что вопрос я сформулировал некудышно =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)