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


Автор: Kusik 9.12.2005, 15:17
С помощью каких функций (или компонентов) можно просканировать директорию на наличие файлов определенного типа и получить их имена (в т.ч. и полный сетевой путь), чтобы в дальнейшем с ними работать?
например компонент TDriveComboBox не позволяет просматривать содержимое сети, с помощью чего это можно осуществить?

Автор: Демо 9.12.2005, 15:22
FindFirst/FindNext
FindFirstFile/FindNextFile

Автор: Snowy 9.12.2005, 15:24
Цитата(Kusik @ 9.12.2005, 15:17)
С помощью каких функций (или компонентов) можно просканировать директорию на наличие файлов определенного типа и получить их имена

FindFirst, FindNext

Цитата(Kusik @ 9.12.2005, 15:17)
например компонент TDriveComboBox не позволяет просматривать содержимое сети

Он показывает только список дисков.

Цитата(Kusik @ 9.12.2005, 15:17)
с помощью чего это можно осуществить?

Смотря что ты хочешь получить в итоге.
Диалог? Заполнить список? Выбрать файл?

Автор: Kusik 9.12.2005, 15:30
мне нужно анализировать файлы, которые лежал по сети на другом компьютере, причем названия файлов я знать не могу, только могу знать папку где они лежат.
с помощью чего можно задать сетевую папку как источник хранения файлов, чтобы потом получать полный их список?
т.е. единоразово указать папку-хранилище и комп на котором она находится, а дальше получать список файлов и каждый по отдельности обрабатывать. (использовать их только для чтения и анализа содержимого)

Автор: Snowy 9.12.2005, 16:35
Цитата(Kusik @ 9.12.2005, 15:30)
с помощью чего можно задать сетевую папку как источник хранения файлов

Смотря как задавать. Если программно, то просто в любую string переменную.
Если спросить у пользователя, то поле Edit или диалог выбора каталога.

Цитата(Kusik @ 9.12.2005, 15:30)
чтобы потом получать полный их список?

Список, как уже было сказано выше, можно получить при помощи FindFirst, FindNext.
Если тебе нужно его нарисовать, то положи на форму FileListBox, в качестве Mask укажи ему:
'\\компьютер\папка\*.*';
Аналогичную маску применять для FindFirst.
Код

procedure ScanDir(path: string);
var
  sr: TSearchRec;
  s:  string;
  i:  integer;
begin
  if FindFirst(path+'*.*',faAnyFile,sr) = 0 then
  begin
    repeat
      if sr.Name[1]='.' then continue;
      if sr.Attr=faDirectory then ScanDir(path+sr.Name+'\');
      if sr.Attr=faArchive then
        Form1.Memo1.Lines.Add(path+sr.Name);
    until FindNext(sr) <> 0;
  end;
end;

Использовать:
Код

  ScanDir('\\Computer\MyFolder\');

Этот код выведет в Memo1 список всех файлов на компьютере Computer, в папке MyFolder.

Автор: _hunter 9.12.2005, 16:39
в смысле? расшарь ее и все проблемы...

Автор: Kusik 12.12.2005, 14:14
а с помощью какой функции можно вызвать диалог открытия директории причем сетевой???

Автор: Snowy 12.12.2005, 14:19
Код

function SelectFolder(Handle: THandle): string;
var
  bi: TBrowseInfo;
  s: PChar;
  PIDL, ResPIDL: PItemIDList;
begin
  SHGetSpecialFolderLocation(Handle, CSIDL_DESKTOP, PIDL);
  s := StrAlloc(128);
  bi.hwndOwner := Handle;
  bi.pszDisplayName := s;
  bi.lpszTitle := 'Выбор прапки';
  bi.pidlRoot := PIDL;
  bi.lpfn := addr(CallBack);
  ResPidl := SHBrowseForFolder(BI);
  SHGetPathFromIDList(ResPidl, s);
  result:=s;
end;

Автор: Kusik 12.12.2005, 15:11
TBrowseInfo это где на него ссылаться?
и какой хендл передавать в функцию?

Автор: Snowy 12.12.2005, 15:17
Цитата(Kusik @ 12.12.2005, 15:11)
TBrowseInfo это где на него ссылаться?

В uses указать ShlObj.

Цитата(Kusik @ 12.12.2005, 15:11)
и какой хендл передавать в функцию?

Хэндл формы, из которой вызываешь.

Автор: Kusik 12.12.2005, 15:34
и еще такое CallBack не находит

Автор: Snowy 12.12.2005, 15:37
Это я забыл. Вот:
Код

procedure CallBack(wnd: hWnd; uMsg: UINT; lParam, lpData: LParam) stdcall;
begin
  SendMessage(wnd, BFFM_ENABLEOK, 0, 1);
end;

Автор: Kusik 12.12.2005, 15:43
Спасибо!!! smile

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