کار با فایل در ویژوال بیسیک
مقدمه
به دو روش می شود با فایل کار کرد
روش اول بصورت دستی است که در ذیل به آن می پردازم
روش دوم بصورت سیستمی هست
بطور کلی فایلها بر دو نوع هستند :
این فایلها فقط شامل کاراکترهاي اسکی و : Text File 1 - فایلهاي متنی برخی کاراکترهاي خاص مانند انتهاي خط و انتهاي فایل هستند .
شامل هر نوع کاراکتري می توانند : Binary File 2 - فایلهاي باینري باشند و کاربردهاي گسترده اي دارند مانند بانک هاي اطلاعاتی ، فایلهاي اجرائی ، فایلهاي گرافیکی و غیره ویژوال بیسیک می تواند با هر دو نوع فایل کار کند .
چگونگی باز کردن فایلها
قبل از اینکه بتوان عملیات ورودي/خروجی را روي یک فایل انجام داد ابتدا بایستی آنرا باز کرد . باز کردن فایلها در ویژوال بیسیک توسط انجام می شود . فرمت کلی این دستور بصورت زیر است Open دستور :
Open filename [For mode] [Access access][lock] As
filenumber [Len=reclen]x[#]
[ پارامترهاي داخل کروشه اختیاري هستند . ]
نام فایلی است که می خواهیم آنرا باز کنیم . filename
حالت باز کردن فایل است . این حالتها عبارتند از : mode
فایل بعنوان ورودي باز می شود . : Input -
فایل بعنوان خروجی باز می شود . : Output -
فایل از نوع باینري باز می شود . : Binary -
فایل طوري باز می شود که بتوان به انتهاي آن چیزي : Append -
اضافه کرد .
Random -
نوع دسترسی به فایل را مشخص می کند . انواع دسترسیها access عبارتند از :
خواندن فایل : Read -
نوشتن در فایل : Write -
خواندن و نوشتن فایل : ReadWrite -
نوع دسترسی سایر برنامه ها به این فایل را مشخص می کند . lock
انواع دسترسیها عبارتند از :
دسترسی اشتراکی : Shared -
Lock Read -
Lock Write -
Lock Read Write -
عددي است که ویژوال بیسیک از آن براي دسترسی به filenumber فایل استفاده می کند .این عدد بایستی براي هر فایل منحصر بفرد و بین 1 تا 511 باشد . براي بدست آوردن اولین شماره آزاد می توان از تابع استفاده کرد . FreeFile طول بافر فایل است . این عدد بایستی از 32767 کو چکتر باشد . : reclen مشخص شده وجود نداشته و filename در صورتی که فایلی که توسط باز شده باشد Random و یا Output ،Binary ،Append فایل براي در اینصورت یک فایل جدید با این نام ساخته می شود .
نادیده Len در صورتی که فایل بصورت باینري باز شده باشد پارامتر گرفته می شود .
چگونگی بستن فایل
استفاده می Close پس از پایان کار با فایل براي بستن آن از دستور کنیم . فرمت این دستور بصورت زیر است :
Close #filenumber
بدون هیچ پارامتري تمام فایلهاي باز را می بندد . Close دستور کار با دایرکتوري می توان نام فایلهاي موجود در یک Dir توسط دستور : Dir 1 - گرفتن دایرکتوري را بر اساس پارامترهایی که به آن می دهیم پیدا کنیم . براي مثال :
Myfile=Dir$("c:\text\*.txt)"x
را که C:\TEXT دستور فوق نام اولین فایل موجود در دایرکتوري قرار می دهد . اگر دستور فوق را Myfile باشد در متغیر txt پسوند آنها بدون پارامتر مجدداً اجرا کنیم نام دومین فایل برگرداننده می شد و الی
آخر داراي یک پارامتر اختیاري است که نوع فایلهاي مورد نظر را نیز می Dir توان با آن مشخص نمود . مثال :
Myfile=Dir$("c:\text\*.txt",vbNormal)x
مقادیر ممکن این پارامتر عبارتند از :
vbDirectory ، vbSystem ،vbHidden ،vbNormal
ChDir 2 - تغییر دایرکتوري : براي تغییر دایرکتوري از دستور استفاده می شود مثال :
ChDir "c:\windows\system32"x
استفاده می ChDrive 3 - تغییر درایو : براي تغییر درایو از دستور شود مثال :
ChDrive "E:"x
MKDir 4 - ساخت دایرکتوري : براي ایجاد دایرکتوري جدید از دستور استفاده می شود مثال :
MKDir "c:\MyFolder"x
RmDir 5 - حذف دایرکتوري : براي حذف دایرکتوري از دستور استفاده می شود مثال :
RmDir "C:\MyFoler"x
کار با فایل در ویژوال بیسیک - بخش دوم خواندن از فایل :
می توان Input Line و Input توسط دستورهاي : Input 1 - دستور
محتواي فایلهاي متنی و باینري را خواند .
به دو صورت بکار می رود : Input دستور
Filenumber,ReadData# Input
ReadData=Input(Charnum,Filenumber)x
قرار می دهد . ReadData دستور اول کل یک فایل را خوانده و در متغیر Filenumber بایت از فایلی با شماره Charnum دستور دوم ، تعداد قرار می دهد . ReadData را خوانده و در متغیر این دو دستور تمام کاراکترهاي موجود در فایل را می خوانند . براي استفاده Line Input اینکه بتوان فایل را خط به خط خواند ، از دستور کنید :
Filenumber,ReadData# Line Input
بیشتر براي خواندن فایلهاي متنی استفاده Line Input البته از دستور می شود زیرا ممکنست در فایل باینري هیچ کاراکتر انتهاي خط ( وجود نداشته باشد و یکباره کل فایل خوانده شود . ( CRLF
از این دستور براي خواندن فایلهاي باینري با : Get 2 - دستور استفاده میشود : ( Random Access ) دسترسی تصادفی Get #Filenumber,[Recordnum%],ReadData را از فایلی با شماره Recordnum این دستور رکورد شماره قرار می دهد . علامت ReadData می خواند و در متغیر Filenumber اختیاري است و در Recordnum کروشه نشان می دهد که پارامتر صورتیکه ذکر نشود داده ها از رکورد بعدي فایل ( جائیکه اشاره گر فایل آنجا قرار دارد ) خوانده می شوند .
نوشتن در فایل :
توسط این دستور می توان اطلاعاتی را در فایل قرار : Print 1 - دستور داد :
Print #FileNumber,WriteData
را در فایلی با شماره WriteData دستور فوق محتویات متغیر می توان اطلاعات را Print می نویسد . بوسیله دستور FileNumber بصورت خط به خط در فایل نوشت براي مثال : Hello Visual Basic"+Vbcrlf",1# Print در ویژوال ( CRLF ) نشان دهنده کاراکتر انتهاي خط Vbcrlf عبارت بیسیک می باشد .
این دستور براي نوشتن داده ها در فایلهاي باینري با : Put 2 - دستور دسترسی تصادفی بکار می رود :
FileNumber,[Recordnum],WriteData# Put
را در رکورد شماره WriteData این دستور محتویات متغیر قرار می دهد . Recordnum
تعیین محل رکورد در فایلهاي با دسترسی تصادفی :
براي منتقل کردن اشاره گر فایل به یک رکورد در یک فایل باینري با استفاده می شود . این دستور محل Seek دسترسی اتفاقی ، از دستور یک بایت را در فایل می گیرد و اشاره گر فایل را در آنجا قرار می دهد می توانند با این رکورد کار کنند : Get و Put بنابراین دستورات FileNumber,RecordNumber# Seek
تشخیص انتهاي فایل :
EOF براي اینکه متوجه شویم به انتهاي یک فایل رسیده ایم از دستور را بر می False یا True استفاده می کنیم . این دستور یکی از مقادیر گرداند که نشان می دهد به انتهاي فایلرسیده ایم یا نه . از این تابع در استفاده می شود : Do-While حلقه هاي
EOF(FileNumer))x) Do While Not
.
.
.
Loop
حلقه فوق تا زمانیکه فایل موردنظر به انتها نرسیده باشد اجرا خواهد شد .
بدست آوردن طول یک فایل :
می توان طول محتویات یک فایل را بدست آورد : LOF بوسیله دستور
FileSize=LOF(FileNumber)x
بدست آوردن محل اشاره گر فایل :
می توان محل جاري اشاره گر فایل را بدست آورد . Loc توسط دستور اجرا شدن این دستور محل اشاره گر را تغییر نمی دهد :
FilePosition=Loc(FileNumber)x
کار با فایل در ویژوال بیسیک - بخش سوم
سایر عملیات کار با فایل :
استفاده می Kill 1 - حذف فایل : براي حذف یک یا چند فایل از دستور شود :
Kill "C:\Temp\MyFile.txt"x
C:\Temp\*.txt"x" Kill
2 - انتقال فایل : براي انتقال یک فایل از یک دایرکتوري به دایرکتوري استفاده می شود . مبدا و مقصد بایستی روي یک Name دیگر از دستور درایو باشند . اگر دایرکتوري مبدا و مقصد یکی باشد فایل تغییر نام داده می شود :
C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x" Name
3 - کپی کردن فایل : براي کپی کردن یک فایل از یک دایرکتوري به استفاده می شود : FileCopy دایرکتوري دیگر از دستور
FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x
4 - بدست آوردن تاریخ و زمان آخرین تغییر فایل و یا زمان ایجاد فایل :
استفاده می شود . ابتدا بایستی FileDateTime براي این کار از دستور تعریف کرده و سپس توسط این دستور Variant یک متغیر از نوع تاریخ و زمان موردنظر را استخراج کنیم :
Variant Dim FileInfo As
FileInfo=FileDateTime("C:\Temp\MyFile.txt")x
5 - استخراج طول فایل : براي بدست آوردن طول یک فایل بر حسب بایت استفاده می شود : FileLen از دستور
FileSize=FileLen("C:\MyFile.txt") X
SetAttr 6 - تغییر صفت یک فایل : براي تغییر صفت یک فایل از دستور استفاده می شود . پارامترهاي این دستور عبارتند از :
0 : فایل معمولی
2 : فایل مخفی
4 : فایل سیستمی
FileNumber,FileAttrib SetAttr
مقابله با خطاهاي کار با فایل :
در زمان کار با فایلهاي احتمال زیادي وجود دارد که خطا بوجود آید .
بنابراین بایستی در زمان کار با فایلها در صورت ممکن از روتینهاي مقابله با خطا استفاده کنیم . شایع ترین خطاهاي کار با فایل عبارتند از :
52 : شماره یا نام فایل صحیح نیست
53 : فایل پیدا نشد
54 : حالت فایل صحیح نیست
55 : فایل قبلاً باز شده
58 : فایل از قبل وجود دارد
59 : طول رکورد صحیح نیست
61 : دیسک پر است
62 : عبور از انتهاي فایل
63 : شماره رکورد صحیح نیست
70 : دسترسی ممنوع است
71 : دیسک آماده نیست
76 : مسیر پیدا نشد
استفاده Select-Case در هنگام مقابله با خطا بهتراست از یک ساختار
کنید :
Err Select Case
Case 71
MsgBox "Drive is Not Ready"x
End Select
اینجانب حسین امینی فر کارشناس نرم افزار در خدمت تمامی دوستان و آشنایان می باشم. از اینکه لطف کردید و به وبلاگ اینجانب سر زدید کمال تشکر و قدردانی را بعمل می آورم.