کار با فايلها در ويژوال بيسيک 
مقدمه 
بعلت عدم وجود اشاره گر در ويژوال
بيسيک عمليات کار با فايلها در آن نسبتاً ساده می باشد . 
بطور کلی فايلها بر دو نوع هستند :
1 - فايلهای متنی Text File : اين فايلها فقط شامل کاراکترهای اسکی و برخی کاراکترهای خاص
مانند انتهای خط و انتهای فايل هستند .
۲ - فايلهای باينری Binary File : شامل هر نوع کاراکتری می توانند باشند
و کاربردهای گسترده ای دارند مانند بانک های اطلاعاتی ، فايلهای اجرائی ، فايلهای
گرافيکی و غيره 
ويژوال بيسيک می تواند با هر دو نوع
فايل کار کند . 
چگونگی باز کردن فايلها
قبل از اينکه بتوان عمليات
ورودی/خروجی را روی يک فايل انجام داد ابتدا بايستی آنرا باز کرد . باز کردن
فايلها در ويژوال بيسيک توسط دستور 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 عددی
است که ويژوال بيسيک از آن برای دسترسی به فايل استفاده می کند .اين عدد بايستی
برای هر فايل منحصر بفرد و بين ۱ تا ۵۱۱ باشد . برای بدست آوردن اولين شماره آزاد
می توان از تابع FreeFile استفاده کرد .
reclen :طول
بافر فايل است . اين عدد بايستی از ۳۲۷۶۷ کو چکتر باشد .
در صورتی که فايلی که توسط filename مشخص شده وجود نداشته و فايل برای Append ، Binary ، Output و يا Random باز شده باشد در اينصورت يک فايل جديد
با اين نام ساخته می شود .
در صورتی که فايل بصورت باينری باز
شده باشد پارامتر Len ناديده گرفته می شود .
چگونگی بستن فايل
پس از پايان کار با فايل برای بستن آن
از دستور Close استفاده می کنيم . فرمت اين دستور
بصورت زير است :
Close #filenumber
دستور Close بدون هيچ پارامتری تمام فايلهای باز
را می بندد .
کار با دايرکتوری
۱ - گرفتن Dir : توسط دستور Dir می توان نام فايلهای موجود در يک
دايرکتوری را بر اساس پارامترهايي که به آن می دهيم پيدا کنيم . برای مثال :
Myfile=Dir$("c:\text\*.txt)"x
دستور فوق نام اولين فايل موجود در
دايرکتوری C:\TEXT را که پسوند آنها txt باشد
در متغير Myfile قرار می دهد . اگر دستور فوق را بدون
پارامتر مجدداً اجرا کنيم نام دومين فايل برگرداننده می شد و الی آخر
Dir دارای يک
پارامتر اختياری است که نوع فايلهای مورد نظر را نيز می توان با آن مشخص نمود .
مثال :
Myfile=Dir$("c:\text\*.txt",vbNormal)x
مقادير ممکن اين پارامتر عبارتند از : 
vbNormal ، vbHidden ، vbSystem ، vbDirectory
۲ - تغيير دايرکتوری : برای تغيير
دايرکتوری از دستور ChDir استفاده می شود مثال :
ChDir "c:\windows\system32"x
۳ - تغيير درايو : برای تغيير درايو از
دستور ChDrive استفاده می شود مثال :
ChDrive "E:"x
۴ - ساخت دايرکتوری : برای ايجاد
دايرکتوری جديد از دستور MKDir استفاده می شود مثال :
MKDir "c:\MyFolder"x
۵ - حذف دايرکتوری : برای حذف دايرکتوری
از دستور RmDir استفاده می شود مثال :
RmDir "C:\MyFoler"x
خواندن از فايل :
1 - دستور Input : توسط
دستورهای Input و Line Input می
توان محتوای فايلهای متنی و باينری را خواند . 
دستور Input به
دو صورت بکار می رود :
Input #Filenumber,ReadData
ReadData=Input(Charnum,Filenumber)x
دستور اول کل يک
فايل را خوانده و در متغير 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))x
.
.
.
Loop
حلقه فوق تا
زمانيکه فايل موردنظر به انتها نرسيده باشد اجرا خواهد شد .
بدست آوردن طول
يک فايل :
بوسيله دستور LOF می
توان طول محتويات يک فايل را بدست آورد :
FileSize=LOF(FileNumber)x
بدست
آوردن محل اشاره گر فايل :
توسط دستور Loc می
توان محل جاری اشاره گر فايل را بدست آورد . اجرا شدن اين دستور محل اشاره گر را
تغيير نمی دهد :
FilePosition=Loc(FileNumber)x
ساير عمليات کار با فايل :
۱ - حذف فايل : برای حذف يک يا چند فايل از
دستور Kill استفاده
می شود :
Kill "C:\Temp\MyFile.txt"x
Kill "C:\Temp\*.txt"x
۲ - انتقال فايل : برای انتقال يک فايل از
يک دايرکتوری به دايرکتوری ديگر از دستور Name استفاده می شود . مبدا و مقصد
بايستی روی يک درايو باشند . اگر دايرکتوری مبدا و مقصد يکی
باشد فايل تغيير نام داده می شود :
Name "C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x
۳ - کپی کردن فايل : برای کپی کردن يک فايل
از يک دايرکتوری به دايرکتوری ديگر از دستور
FileCopy استفاده
می شود :
FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x
۴ - بدست آوردن تاريخ و زمان آخرين تغيير
فايل و يا زمان ايجاد فايل : برای اين کار از دستور
FileDateTime استفاده
می شود . ابتدا بايستی يک متغير از نوع Variant تعريف کرده و سپس توسط اين
دستور تاريخ و زمان موردنظر را استخراج کنيم :
Dim FileInfo As Variant
FileInfo=FileDateTime("C:\Temp\MyFile.txt")x
۵ - استخراج طول فايل : برای بدست آوردن
طول يک فايل بر حسب بايت از دستور FileLen استفاده می شود :
FileSize=FileLen("C:\MyFile.txt")x
۶ - تغيير صفت يک فايل : برای تغيير صفت يک
فايل از دستور SetAttr استفاده
می شود . پارامترهای اين دستور عبارتند از :
0 : فايل معمولی
2 : فايل مخفی
4 : فايل سيستمی
SetAttr FileNumber,FileAttrib 
مقابله
با خطاهای کار با فايل :
در زمان کار با
فايلهای احتمال زيادی وجود دارد که خطا بوجود آيد . بنابراين بايستی در زمان کار
با فايلها در صورت ممکن از روتينهای مقابله با خطا استفاده کنيم . شايع ترين
خطاهای کار با فايل عبارتند از :
۵۲ : شماره يا نام فايل صحيح نيست
۵۳ : فايل پيدا نشد
۵۴ : حالت فايل صحيح نيست
۵۵ : فايل قبلاً باز شده
۵۸ : فايل از قبل وجود دارد
۵۹ : طول رکورد صحيح نيست
۶۱ : ديسک پر است
۶۲ : عبور از انتهای فايل
۶۳ : شماره رکورد صحيح نيست
۷۰ : دسترسی ممنوع است
۷۱ : ديسک آماده نيست
۷۶ : مسير پيدا نشد
در هنگام مقابله
با خطا بهتراست از يک ساختار Select-Case استفاده کنيد :
Select Case Err
Case 71
MsgBox "Drive is Not Ready"x
.
.
.
End Select
امین سلطانی
 
 
 
 
    
 
  
       + نوشته شده در ۱۳۹۰/۱۲/۱۵ ساعت 9:7 توسط امین
        |