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