Сохранение списка документов в текстовый файл
Привет! Пишу программку вывода списка документов в выбранной папке. Список в самой программке выводит, но еще нужно сделать чтобы она этот список сохраняла в текстовый файл. Как это сделать толком незнаю, т.к в дельфи новичек, надеюсь на вашу помощь.
Код целиком:
Код:
unit ListBuilderUnit;
//Построитель списка документов
//Главная форма
interface
uses
FileCtrl, ShellAPI,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtDlgs, StdCtrls, ComCtrls, ImgList, ExtCtrls, OleServer;
type
TListBuilderForm = class(TForm)
DirectorySelectButton: TButton;
DirectoryEdit: TEdit;
FileListView: TListView;
IconImageList: TImageList;
SaveDialog: TSaveDialog;
Button1: TButton;
procedure DirectorySelectButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure AddFiles(Extension: string);
procedure AddFile(FileName: string; FileSize: integer;
FileDateTime, Extension: string);
public
{ Public declarations }
end;
var
ListBuilderForm: TListBuilderForm;
implementation
{$R *.DFM}
//Получить полное имя файла из пути к каталогу Dir и имени Name
function GetFullFileName(Dir, Name: string): string;
begin
Result := ExcludeTrailingBackslash(Dir) + '\' + Name;
end;
//Добавить в список файл с
//именем FileName, размером FileSize, временем изменения FileDateTime,
//расширением Extension
procedure TListBuilderForm.AddFile(FileName: string; FileSize: integer;
FileDateTime, Extension: string);
var
NewItem: TListItem;
FileInfo: TSHFileInfo;
begin
Newitem := FileListView.Items.Add;
NewItem.Caption := FileName;
if SHGetFileInfo(PChar(GetFullFileName(DirectoryEdit.Text, FileName)), 0,
FileInfo, sizeof(TSHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then begin
NewItem.ImageIndex := FileInfo.IIcon
end else
NewItem.ImageIndex := 0;
NewItem.SubItems.Add(FloatToStrF(FileSize, ffNumber, 18, 0));
NewItem.SubItems.Add(FileDateTime);
begin
NewItem.SubItems.Add('');
end;
Application.ProcessMessages;
end;
//Найти все файлы с расширением Extension и добавить их в список
procedure TListBuilderForm.AddFiles(Extension: string);
var
SearchRec: TSearchRec;
begin
if FindFirst(GetFullFileName(DirectoryEdit.Text, '*.' + Extension),
faAnyFile - faDirectory, SearchRec) = 0 then begin
AddFile(SearchRec.Name, SearchRec.Size,
FormatDateTime('dd.mm.yy hh:nn:ss',
FileDateToDateTime(SearchRec.Time)), Extension);
while FindNext(SearchRec) = 0 do begin
AddFile(SearchRec.Name, SearchRec.Size,
FormatDateTime('dd.mm.yy hh:nn:ss',
FileDateToDateTime(SearchRec.Time)), Extension);
end;
end;
FindClose(SearchRec);
end;
//По созданию формы заменить обработчик ощибок
//и найти список системных иконок
procedure TListBuilderForm.FormCreate(Sender: TObject);
var
FileInfo: TSHFileInfo;
begin
IconImageList.Handle := SHGetFileInfo(PChar(''), 0,
FileInfo, SizeOf(TSHFileInfo), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
end;
//По нажатию кнопки DirectorySelectButton выбрать папку
//и построить список ее файлов
procedure TListBuilderForm.DirectorySelectButtonClick(Sender: TObject);
var
Dir: string;
begin
if SelectDirectory('Выберите папку с документами',
'', Dir) then begin
DirectoryEdit.Text := Dir;
FileListView.Items.Clear;
AddFiles('txt');
AddFiles('rtf');
AddFiles('doc');
end;
end;
end.
До этих пор все работает, выводит список файлов. К коду прошу не передраться, возможно можно было сделать все проще, но мне нужно делать именно так, по выданному примеру.
Ну а дальше у меня ступор, как собственно все это дело сохранить в текстовый файл... Вот выложу кое-какие попытки это осуществить:
Код:
procedure TListBuilderForm.SaveDialog(Sender: TObject);
begin
if DirectoryEdit.Text <> '' then begin //Диалог задания имени документа
SaveDialog.InitialDir := DirectoryEdit.Text
end else begin
SaveDialog.InitialDir := '.';
end;
SaveDialog.DefaultExt := 'txt';
SaveDialog.Filter := '*.txt|*.txt';
SaveDialog.FileName := 'Unknown.txt';
if SaveDialog.Execute then begin
FileListView.Items.SaveToFile(SaveDialog.FileName);
end;end;
end.
А вот как это было в примере, в нем список сохраняется в вордовский файл, но он почемуто не работает.(Ошибка в: "WordApplication.Documents.Add(Template, NewTemplate);" )
Код:
//По нажатию кнопки WordExportButton сохранить список
//в документ DOC Microsoft Word
procedure TListBuilderForm.WordExportButtonClick(Sender: TObject);
var
Template, NewTemplate, ItemIndex,
WordFileName, AlignTab, TabLeader: OleVariant;
k: Integer;
WordString: string;
begin
if DirectoryEdit.Text <> '' then begin //Диалог задания имени документа
SaveDialog.InitialDir := DirectoryEdit.Text
end else begin
SaveDialog.InitialDir := '.';
end;
SaveDialog.DefaultExt := 'doc';
SaveDialog.Filter := '*.doc|*.doc';
SaveDialog.FileName := 'Unknown.doc';
if SaveDialog.Execute then begin
if SaveDialog.FileName <> '' then begin
try
WordApplication.Connect; //Запустить Word
Template := 'EmptyParam';
NewTemplate := false;
WordApplication.Documents.Add(Template, NewTemplate);
ItemIndex := 1;
WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
//Абзац без отступа с одинарным интервалом строк
WordApplication.Selection.ParagraphFormat.LineSpacingRule :=
wdLineSpaceSingle;
WordApplication.Selection.ParagraphFormat.FirstLineIndent := 0;
//Табуляции и размер шрифта
TabLeader := wdTabLeaderSpaces;
AlignTab := wdAlignTabRight;
WordApplication.Selection.ParagraphFormat.TabStops.Add(
WordApplication.CentimetersToPoints(10) ,AlignTab ,TabLeader);
AlignTab := wdAlignTabLeft;
WordApplication.Selection.ParagraphFormat.TabStops.Add(
WordApplication.CentimetersToPoints(10.3) ,AlignTab ,TabLeader);
AlignTab := wdAlignTabRight;
WordApplication.Selection.ParagraphFormat.TabStops.Add(
WordApplication.CentimetersToPoints(17.7) ,AlignTab ,TabLeader);
WordApplication.Selection.Font.Size := 8;
//Путь к папке
WordString := SaveDialog.InitialDir;
WordApplication.Selection.TypeText(WordString);
WordApplication.Selection.TypeParagraph;
WordApplication.Selection.TypeParagraph;
if FileListView.Items.Count > 0 then begin
//Заголовок списка
WordString := 'Имя' + Chr(9) + 'Размер, байт' + Chr(9) +
'Изменен' + Chr(9) + 'Параметры';
WordApplication.Selection.TypeText(WordString);
WordApplication.Selection.TypeParagraph;
WordString := '---------------------------------------------------------------------------------------------------------';
WordApplication.Selection.TypeText(WordString);
WordApplication.Selection.TypeParagraph;
//Текст списка
for k := 0 to FileListView.Items.Count - 1 do begin
WordString := FileListView.Items.Item[k].Caption + Chr(9) +
FileListView.Items.Item[k].SubItems[0] + Chr(9) +
FileListView.Items.Item[k].SubItems[1] + Chr(9) +
FileListView.Items.Item[k].SubItems[2];
WordApplication.Selection.TypeText(WordString);
WordApplication.Selection.TypeParagraph;
end;
end;
//Сохранить документ и закрыть Word
WordFileName := SaveDialog.FileName;
WordDocument.SaveAs(WordFileName);
WordApplication.Quit;
WordApplication.Disconnect;
except
MessageDlg('Ошибка. Возможно, Word не установлен.',
mtError, [mbOk], 0);
end;
end;
end;
end;
Мне хотя бы все это дело научить сохраняться в простой текстовый файл, ну или может кто выяснит почему несохраняет в вордовский. Надеюсь на вашу помощь...
|