PDA

View Full Version : مبتدی: مشکل با خواندن اطلاعات از فایل!



mbshareat
سه شنبه 02 آذر 1389, 18:52 عصر
با سلام و درود
من یه برنامه دارم که توی اون از یه کمپوننت نمایش شاخه و از یک کمپوننت نمایش فایل استفاده می کنم و در قسمتی از اون فایلهای شاخه های پایینتر رو می خونم.
ولی هنگام خوندن فایلها با پیغام خطا مواجه می شم.این کد خواندن فایلهاست :

Procedure TForm1.ReadFiles();
Var
I,J:Integer;
F: file of Byte;
ButesNo: Longint;
Buf: Array [1..65000] Of Char;
FileName,S:String;
Begin
PCNo:=0;
PCRefNo:=0;
DirList.Directory:=ExtractFileDir(Application.ExeN ame);
For I:=DirList.ItemIndex+1 to DirList.Count-1 do
Begin
FileList.Directory:=DirList.Directory+'\'+DirList. Items[i];
FileList.Refresh;
For J:=0 to FileList.Count-1 do
Begin
FileName:=FileList.Directory+'\'+FileList.Items[J];
AssignFile(F,FileName);
Reset(F);
Seek(F,0);
BlockRead(F,Buf,ButesNo);
S:=Buf;
GetFilePCs(S,FileName);
End;
End;
End;

تو خط BlockRead ایراد می گیره!
این هم خطا:

Felony
سه شنبه 02 آذر 1389, 20:09 عصر
فایل ها از نوع متنی هستن ؟
اگر اینطور هست بهتره از کلاس TStringList استفاده کنید ، اون روش خوندن فایل که در بالا نوشتید در پاسکال استفاده میشده ، در هر صورت برای حل مشکل کد بالا میتونید به لینک زیر مراجعه کنید :

http://www.delphibasics.co.uk/RTL.asp?Name=BlockRead

در مورد کلاس TStringList هم : http://www.delphibasics.co.uk/RTL.asp?Name=TStringList

mbshareat
سه شنبه 02 آذر 1389, 23:32 عصر
سلام علیکم
جناب آقای تاجیک من به لینک رفتم ولی چیز جدیدی پیدا نکردم.
در ضمن هنوز نفهمیدم مشکل از کجا بوده ؟:گیج:
قبل از اینکه جواب شما رو بخونم هم از TStringList استفاده کردم و مشکلی نداشتم(البته دو کارکتر آخر رو که انتهای خطه باید حذف کرد:متفکر:)
اما دوست دارم بتونم با خوندن بلاک کارکتر هم راحت کار کنم. تو یه برنامه دیگه شبیه همین کد رو داشتم و بدون مشکل اجرا می شد.(البته نوع فایل Byte نبود ولی اگر فایل رو بدون نوع هم تعرف کنم باز پیغام میده!)
ممنون می شم بهم بگین اشکال کدم چیه؟:اشتباه:

vcldeveloper
چهارشنبه 03 آذر 1389, 01:02 صبح
اما دوست دارم بتونم با خوندن بلاک کارکتر هم راحت کار کنم. تو یه برنامه دیگه شبیه همین کد رو داشتم و بدون مشکل اجرا می شد.(البته نوع فایل Byte نبود ولی اگر فایل رو بدون نوع هم تعرف کنم باز پیغام میده!)
ممنون می شم بهم بگین اشکال کدم چیه؟اول اینکه، BlockRead برای خواندن فایل های بدون نوع هست، نه فایل های دارای نوع.
دوم اینکه، مقدار پارامتر Count مربوط به BlockRead (که شما براش متغیر ButesNo را در نظر گرفتید)، غیر مشخص هست؛ چون متغیر را به صورت local تعریف کردید، و بهش مقدار اولیه ندادید، پس مقدارش میتونه هر چیزی باشه! باید قبل از فراخوانی BlockRead، مقدار این متغیر را برابر با اندازه بافر قرار می دادید.
سوم هم اینکه، اگر از دلفی 2009 یا نسخه های بالاتر استفاده می کنید، باید حواستان باشه که Char مساوی است با WideChar؛ یعنی Char دو بایت از حافظه اشغال میکنه، نه یک بایت از حافظه.