Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

Как достать свойства файла?   Найти похожие ветки 

 
MAVr   (2005-07-10 01:23) [0]

Есть задача достать название, размер, свойства всех файлов в определенном каталоге.
Программа работает нормально если обрабатывается небольшое количество файлов, если же нужно обработать тысячи файлов начинаются траблы…
Поскольку, использую открытие файла… Тоесть программа запускается, открывает поочередно все файлы читая из них информацию после чего закрывается (закрывая все файлы). Тысячи файлов тому же Ворду открывать довольно проблематично.
Подскажите как работать с файлом не открывая его а соединяясь с ним.

Листиенг:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Edit2: TEdit;
   memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   WordApp: Variant;
 end;

var
 Form1: TForm1;

implementation
uses ComObj;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
wdSaveChanges = $FFFFFFFF;

var F: TSearchRec;
SaveChanges: OleVariant;
begin
ChDir("C:\NNNMM\");
Edit1.Text := GetCurrentDir;
FindFirst(GetCurrentDir+"\*.doc", 0, F);
//Edit2.Text := F.Name;
WordApp := CreateOleObject("Word.Application");
WordApp.Documents.Open(GetCurrentDir + "\" + F.Name);
 repeat
memo1.lines.add(F.name);
memo1.lines.add(inttostr(F.Size));
WordApp.Documents.Open(GetCurrentDir + "\" + F.Name);
memo1.lines.add(WordApp.ActiveDocument.BuiltInDocumentProperties[$00000005].Value);
memo1.lines.add("");
   SaveChanges := wdSaveChanges;
until findnext(F)<>0;
findclose(F);
   WordApp.Quit(SaveChanges, EmptyParam, EmptyParam);

end;

end.


 
Просто Джо ©   (2005-07-10 02:36) [1]

А что мешает сделать открытом документу Close сразу же после получения из него нужной информации?


 
MAVr   (2005-07-10 11:46) [2]

Если не сложно... Как будет выглядеть Close в контексте программы (пробовал, но возникали критические ошибки)

... А вообще хотелось бы организовать именно связь с файлами, поскольку если обрабатыватся будут тысячи файлов, то это еще и вопрос времени, ведь нужно открыть и закрыть каждый файл...


 
Просто Джо ©   (2005-07-10 14:20) [3]

Во-первых, цикл построен неправильно - после FindFirst ты открываешь документ, после чего, на первой же итерации repeat/until ты открываешь его снова.
А под закрытие документа сразу же после его обработчки я имею ввиду следующее:

WordApp.Documents.Open(GetCurrentDir + "\" + F.Name);
memo1.lines.add(WordApp.ActiveDocument.BuiltInDocumentProperties[$00000005].Value);
WordApp.ActiveDocument.Close(...);


 
Юрий Зотов ©   (2005-07-10 22:33) [4]

> MAVr   (10.07.05 11:46) [2]

Сравните два таких алгоритма:

Алгоритм 1.

начало_цикла
 захватили_ресурс
 обработали_его
конец_цикла
освободили_все_ресурсы

Алгоритм 2.

начало_цикла
 захватили_ресурс
 обработали_его
 освободили_его
конец_цикла
 
1. Какой алгоритм жрет меньше ресурсов?
2. По какому алгоритму работает Ваш код?

Ответьте себе на эти вопросы - и сразу все станет ясно.


 
Сергей Евгеньевич   (2005-07-11 01:52) [5]

а по моему в дельфях есть такая фигня, как Filelistbox и там можно задавать с какими параметрами показывать файлы)) берешь и делаешь чтобы он поочередно показывал сначала скрытые, потом там системные и так далее, и по категориям засовывал их в твой TMemo. Ась?


 
MAVr   (2005-07-11 03:40) [6]

Да, все нормально работает... Спасибо.
Но все же, можно ли именно связатся с файлом, не открывая его?


 
Просто Джо ©   (2005-07-11 03:42) [7]


>
>  [6] MAVr   (11.07.05 03:40)
> Но все же, можно ли именно связатся с файлом, не открывая
> его?

Это смотря что ты понимаешь под "связаться".



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.049 c
14-1120927175
lookin
2005-07-09 20:39
2005.07.31
Как правильно, "до 7-ми" или "до 7-и"?


3-1118841262
Магнум
2005-06-15 17:14
2005.07.31
Работа с подтаблицами в MDB


4-1117539679
chili
2005-05-31 15:41
2005.07.31
Подскажите как определить IP адресс используя WinAPI


4-1116411956
lehich
2005-05-18 14:25
2005.07.31
кодировка и clipboard


4-1116811498
boalse
2005-05-23 05:24
2005.07.31
Узнать серийный номер винта (не тома)....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский