فایلها در VB

مقدمه 

بعلت عدم وجود اشاره گر در ویژوال بیسیک عملیات کار با فایلها در آن نسبتاً ساده می باشد . بطور کلی فایلها بر دو نوع هستند : 


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 

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد