Консультация № 68317
23.12.2006, 21:53
0.00 руб.
0 4 4
Как называется процедура, которая отбражает все содержимое определенной директории или диска? (Что-то вроди dir в COMMAND.COM или FindFirst В Паскале).

Обсуждение

Неизвестный
24.12.2006, 00:33
общий
это ответ
Здравствуйте, Bingo!

Процедуры и функции работы с файлами

Function FExpand(Name : PathStr): PathStr
Name - имя файла Получив имя файла, расширяет его до полностью определенного имени (диск, директория и расширение)

Function FSearch(Name : PathStr; OirList: string): PathStr
Name - имя файла; DirList - список путей для поиска; результат - найденный путь к файлу Ищет файл в заданном списке директорий

Function FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr);
Path – имя файла с полным путем;
Dir – директория; Name – имя файла; Ext - расширение Разделяет полное имя файла на 3 части (директория, имя файла, расширение)

Procedure FindFirst(Path : String; Attr: word; var F: TSearchRec);
Path – путь для поиска с маской; Attr- атрибуты искомых файлов; F- запись типа TsearchRec с результатами поиска Ищет в заданном каталоге первый файл, соответствующий заданной спецификации

Procedure FindNext(var F : TSearchRec);
F – запись типа TsearchRec с результатами поиска Ищет следующие файлы, удовлетворяющиеспецификации, заданной в процедуре FindFirst

Procedure GetFAttr(var F, var Attr: word);
F - переменная файлового типа; Attr - код атрибутов файла Определяет атрибуты файла

Procedure SetFAttr(var R Attr: word);
F - переменная файлового типа; Attr - код атрибутов файла Устанавливает атрибуты файла
Посмотрите ещё некоторые описания и исходники здесь http://kladovka.net.ru/index.cgi?pid=article&rid=1.

Удачи!
Неизвестный
24.12.2006, 01:26
общий
это ответ
Здравствуйте, Bingo!
В дополнение к вышесказанному хоху добавить пример кода,
выводящего в Memo список файлов выбранной директории.

Приложение:
procedure TForm1.Button1Click(Sender: TObject);varFF:TsearchRec;begin SetCurrentDir(‘c:\‘);findFirst(‘*.*‘,faAnyFile ,FF);memo1.Lines[0]:=(fF.Name);while FindNext(FF) = 0 do begin findNext(FF); memo1.Lines.Add(fF.Name); end;FindClose(FF);end;
Неизвестный
24.12.2006, 13:34
общий
это ответ
Здравствуйте, Bingo!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CustomizeDlg, Grids, StdCtrls;

type
{TSearchRec = record
Time: Integer; // время создания файла
Size: Integer; // размер
Attr: Integer; // атрибуты файла
Name: TFileName; // имя найденого файла
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end; }
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Searc:TSearchRec;
hfindfile,i:integer;
begin

// ищем файл
//запускаем поиск
hFindFile := FindFirst(edit1.Text,faAnyFile,Searc); //проверяеться коректность найденого файла
i:=1;

if hFindFile <> INVALID_HANDLE_VALUE then
//если коректно то запускаеться цикл repeat - until.
repeat
stringgrid1.Cols[0].Strings[i]:=inttostr(i);
stringgrid1.RowCount:=i+1;
stringgrid1.rows[i].Add(Searc.Name);
stringgrid1.rows[i].Add(inttostr(Searc.Size) + ‘ байт‘);
stringgrid1.rows[i].Add(formatdatetime(‘hh:mm:ss‘,Searc.Time));
stringgrid1.rows[i].Add(inttostr(Searc.attr));
//здесь вписаны операторы которые нужно выполнить.
i:=1+i;
until (FindNext(Searc) <> 0);
FindClose(Searc);
//закрываем поиск
end;
end.

одной процедуры которая бы выполняла dir я не знаю но вот есть ей замена если;
она выдает имя размер файла в stringrid , если тебе нужны только имена то вутри цикла пропиши только stringgrid1.rows[i].Add(Searc.Name);
если нужно в memo1 то memo1.Lines.Add(Searc.Name) ;
TSearchRec = record запись уже забитая в компилятор ее не нужно писать;

Неизвестный
27.12.2006, 10:49
общий
это ответ
Здравствуйте, Bingo!
в Delphi прекрасно работает тот же FindFirst ... FindNext
Форма ответа