0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 5
|
|
1 | |
Сохранение списка документов в текстовый файл13.05.2010, 17:12. Показов 3459. Ответов 9
Метки нет (Все метки)
Привет! Пишу программку вывода списка документов в выбранной папке. Список в самой программке выводит, но еще нужно сделать чтобы она этот список сохраняла в текстовый файл. Как это сделать толком незнаю, т.к в дельфи новичек, надеюсь на вашу помощь.
Код целиком: Код
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. Код
//По нажатию кнопки 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;
0
|
13.05.2010, 17:12 | |
Ответы с готовыми решениями:
9
УНФ для Украины 1.6. Сохранение\Восстановление настроек отбора списка документов Сохранение в текстовый файл Сохранение в текстовый файл Сохранение в текстовый файл |
87 / 66 / 8
Регистрация: 29.09.2009
Сообщений: 425
|
|
13.05.2010, 19:55 | 2 |
Выложи лучше весь проект а там видно будет
0
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
||||||
13.05.2010, 21:23 | 3 | |||||
Насчет
if SaveDialog.Execute then begin FileListView.Items.SaveToFile(SaveDialog.FileName); То в FileListView(TListView) SaveToFile такого метода просто нет. Используй tstringlist не вникая в код, а так как пример
1
|
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 5
|
|
13.05.2010, 22:35 [ТС] | 4 |
Большое спасибо! Разобрался. Появился еще один вопрос: в этом списке у меня выводит - имя файла, его размер, дату последнего изменения. Но мне еще нужно чтобы выводило "первые N непустых строк документа", т.е первые пару слов текстового документа, типа превью. Как это сделать ума не приложу... Кто что посоветует?
0
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
|||||||||||
14.05.2010, 09:36 | 5 | ||||||||||
В листвью выводило пару строк, это будет некрасиво, а пару слов можно.
sl.LoadToFile('pathtofile'); у tstringlist есть сво string{} получишь строки и сво text получишь сразу весь текст, а там выризай скока надо. Но если файл большой тогда открывай его как текстовый файл. Добавить вроде можно так
1
|
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 5
|
|
15.05.2010, 15:05 [ТС] | 6 |
Блин, что-то так и не сообразил как сделать... Выкладываю проект, попробуй ты, если поможеш буду оч. благодарен.
0
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
|
15.05.2010, 17:06 | 7 |
Вроде работает, читай коменты внутри.
На пустоту не проверяет, но первую строку выводит. тхт и rtf обрабатывает, doc как открыть не знаю. Если что пиши.
1
|
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 5
|
|
15.05.2010, 17:26 [ТС] | 8 |
Добавлено через 1 минуту
Большое спасибо! Но есть небольшая проблема, содержание он выводит только для файлов, расположенных в папке с приложением. Если же выбрать другую папку, где его нет, то выскакивает ошибка.
0
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
||||||
15.05.2010, 22:19 | 9 | |||||
Не дотестировал.
Исправь получение пути в процедуре TListBuilderForm.AddFile
1
|
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 5
|
|
16.05.2010, 22:37 [ТС] | 10 |
Спасибо за помощь! Завтра буду защищать эту курсовую
0
|
16.05.2010, 22:37 | |
16.05.2010, 22:37 | |
Помогаю со студенческими работами здесь
10
сохранение в текстовый файл Сохранение в текстовый файл Сохранение в текстовый файл Сохранение информации в текстовый файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |