ورود

View Full Version : تشخیص حجم فایل متنی ومدیریت آن



hamedjafari
شنبه 21 شهریور 1388, 20:29 عصر
سلام.
اولین پستمو دارم می نویسم. امیدوارم آخریش نباشه:لبخند:

یه نرم افزار هست که برای خودش یه سری کارا انجام میده . هر زمان که یه کار جدیدی انجام میده گزارش اونو تو فایل LOG خودش قرار میده .
حالا برای اینکه بفهمم کار جدیدی انجام شده من می خوام حجم فایلشو هر چند ثانیه چک کنم . اگه نسبت به دفع قبل بیشتر شده بود اونو بازش کنم و از شماره خط دفعه قبل تا شماره آخرین خط این دفعه رو بررسی کنم.

حالا مشکل اینه که اولا نمی دونم با چه کامندی میشه سایز فایل رو بدست آورد .
مشکل دوم هم اینه که حجم این فایل متنی خیلی زیاده . اگه بخوام متنشو تو یک Memo کپی کنم چند ثانیه طول می کشه . اما می خوام سریع این کار انجام بشه.

کسی پیشنهادی داره ؟ ضمنا من الکترونیکی هستم و خیلی سر در نمیارم از دلفی:چشمک:
مرسی

جواد ملاولی
شنبه 21 شهریور 1388, 21:33 عصر
سلام. برای بدست آوردن اندازه فایل از تابع FileSize استفاده کنید.

hamedjafari
شنبه 21 شهریور 1388, 23:11 عصر
روشی که انتخاب کردم درسته؟
من تو Help دیدم نوشته : Returns the current size of a file; not used for text files

الان میرم تست می کنم.

vcldeveloper
شنبه 21 شهریور 1388, 23:38 عصر
function SizeOfFile(const FileName: string): integer;
var
hFile : THandle;
begin
hFile := CreateFile(PChar(FileName),
0,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
try
//Get file size. (-1) = error
Result := GetFileSize(hFile,nil);
finally
if hFile > 0 then
CloseHandle(hFile);
end;
end;

hamedjafari
شنبه 21 شهریور 1388, 23:59 عصر
خیلی عالی جواب داد .
اما به یه مشکل دیگه برخوردم .
تو برنامه یه تایمر گذاشتم که هر 5 ثانیه بیاد حجم فایلو با 5 ثانیه قبل مقایسه کنه . اگه بیشتر بود اینطوری عمل کردم :
با استفاده LoadFromFile متن ریخته میشه تو Memo . بعد از آخرین خط دفعه قبل تا آخرین خط فعلی ( در یک حلقه For‌) میاد و عملیات جستجو برای یه سری کدهای خاص رو توسط کامند Pos انجام میده .
اشکال کار اینجاست که در عمل این کار طول می کشه . یعنی وقتی وارد روتین تایمر میشه ، دو سه ثانیه طول می کشه تا نتیجه رو اعلام کنه .
می خواستم بدونم روشم و دستوراتی که استفاده کردم درسته یا نه.

ممنون میشم اینو هم جواب بدین .

tdkhakpur
یک شنبه 22 شهریور 1388, 00:22 صبح
خوب اولش میگید اندازه فایل را به هنگام تغییر لازم دارم بعدد داخل فایل را برای کار دیگر جستجو میکنید.
به فرض کار شما داخل مرحله دیگری باشد شما برای تایمر یک مقدار bool تعریف کنید تا وقتی تابع تایمر اقدام به اجرا کرد مجدد قبلا از اتمام کار دستورات دوباره تکرا نشوند



..gloabal
value : boolan;
..timer procedure
if not value the
begin
value := not value;
// کدهای شما
value := not value;
end;

hamedjafari
یک شنبه 22 شهریور 1388, 00:36 صبح
من اندازه فایل رو برای این می خوام که بفهمم کدهای جدیدی در فایل متنی اضافه شده یا نه.
این کار رو هم حتما انجام میدم .
اما بیشتر می خواستم روش کار و نوع دستوراتی رو که انتخاب کردم مطرح کنم.