کار با فایل ها
فایل چیست؟
برای ذخیره کردن دائمی اطلاعات از فایل استفاده می شود
دستور Open
فایل های تصادفی و ترتیبی هر دو با دستورOpen باز خواهد شد نوع باز کردن فایل به آرگومانهای دستور Open بستگی دارد دستور open یک کانال(شناسای فایل) برای خواندن و نوشتن فایل باز می کند. هر دستور open با یک شماره ارتباط دارد که از طریق آن فایل را شناسایی می کند . حالت (mod) باز شدن فایل-خواندن فایل ،نوشتن یا هر دو نحوه انتقال اطلاعات بین فایل و کامپیوتر مشخص می کند.
دستور Open دو آر گومان دائمی دارد که باید حتماً باشد :
1-نام فایل که شامل نام و پسوند آن است و هم می تواند آدرس هم در آن باشد مثل:"E:\project\file.txt"
2-شماره فایل وقتی فایلی باز می شد برنامه دیگر هرگز از نام آن استفاده نمی کند و فقط با شماره فایل استفاده می کند
شکل ساده دستور Open به این صورت است :
Open "namfaile.format"As #1
شکل کلی آن به این صورت است:
Open"FileName"[For Mode] [Access Restrivtion] [Lock Type] As-
[#] intfileNum [Len =intRecordLenght]
که ما به ترتیب هر کدام از آنها را توضیح می دهیم
حالت های فایل(For Mode)
تعریف : یک کلمه کلیدی خاص است که نوع یا حالت باز شدن فایل را مشخص می کند
آرگومان For Mode (حالتهای باز شدن فایل) اجباری نیستند و اگر آن را ننویسیم حالت For random فرض خواهد شد به مثال زیر توجه کنید:
1.Open "computer.txt"for Random As #1
2.Open "computer.txt"As #1
در حقیقت مثال اول با دوم هیچ فرقی ندارد
شکل Open به این صورت است
Open"نام فایل .فرمت"For Mode As # شماره فایل
حالات باز شدن (For Model)عبارتند از:
Append: یک فایل ترتیبی رابرای نوشتن از انتها باز می کند اگر فایلی وجود نداشته باشد آن را می سازد و نکته قابل توجه این حالت با حالات دیگر این است که اطلاعات قبلی خود را پاک نمی کند .
مثال:
Open"E:\vb6\book.txt"For Append As #1
Output: یک فایل ترتیبی را براي نوشتن باز می کند اگر فایل وجود نداشته باشد آن را می سازد اما محتویات قبلی فایل را پاک می کند و اطلاعات جدید را در آن فایل می نویسد
مثال:
Open"E:\vb6\book.txt"For Output As #1
Input: یک فایل ترتیبی را برای خواندن باز می کند
مثال:
Open"E:\vb6\book.txt"For Input As #1
Binary:یک فایل باینری باز می کند و می تواند فایل را بایت به بایت بخواند یا بنویسد
Random: همانطور که در بالا گفتیم اگر ما For Mode هم انتخاب نکنیم ویژوال بیسیک حالت Random را فرض خواهد کرد این حالت یک فایل را برای خواندن و نوشتن تصادفی باز می کند در این حالت داده ها می تواند از هر نقطه فایل خوانده یا نوشته شوند.
محدود کردن دسترسی به فایل [Access Restrivtion]
با استفاده از این آرگومان می توانیم دسترسی به فایل را به 3 شکل زیر محدود کنیم:
شکل اول: دسترسی به Read که فقط دسترسی به خواندن فایل را محدود می کند.
شکل دوم:دسترسی به Write که فقط دسترسی به خواندن فایل را محدود می کند.
شکل سوم : دسترسی به Read Write که هم خواندن و هم نوشتن را محدود می سازد.
قفل کردن فایل [Lock Type]
با استفاده از این آرگومان می توانید کاری کنید که در حین باز بودن یک فایل برنامه های دیگر نتوانند آنرا بخوانند یا در آن چیزی بنویسند که دارای 4 گزینه است :
1-Shared دسترسی هم زمان به فایل مجاز است
2-قفل Lock Read با استفاده ازآن دیگران حق خواندن فایل را ندارند.
3-قفل Lock Write با استفاده ازآن دیگران حق نوشتن در فایل را ندارند.
4- قفل Lock Read Write با استفاده ازآن دیگران حق خواندن و نوشتن فایل را ندارند.
چگونه یک شماره فایل را تشخيص دهیم:
تابع Free File
اين تابع براي شماره فايل آزاد به كار مي رود و به صورت زير استفاده مي شود
FreeFile=(محدوده شماره فايل)
چنانچه محدوده شماره فايل ذكر نشود محدود شماره فايل را 1 تا 255 در نظر مي گيرد و گرنه محدود شماره فايل را 256 تا 511 در نظر مي گيرد به عنوان مثال:
Dim NumFi as Integer
NumFi=FreeFile
Open"Test.txt"For Output As #NumFi
اين دستور ، فايل Test.txt را به صورت خروجي بازكرده شماره آخرين فايل آزاد را به آن تخصيص مي دهد.
همان طور كه در مثال بالا ملاحظه مي شود، چنانچه در تابع FreeFile محدوده شماره فايل ذكر نشود پرانتز را بايد حذف كرد.
تابع FreeFile را نمي توان به طور مستقيم در فرمان Open بكار برد.به عنوان مثال:
Open"Test.txt"For Output As #NumFi درست نيست
بستن فايل ها
دستورClose
با استفاده از این دستور می توان فایل ها را بست. باید توجه داشت که هر فایلی را که باز می کنیم باید آن را در آخر کار ببندیم
ساختمان دستور Close#
Close#شماره فایل
نوشتن در فايل ترتيبي
دستور#Print
تا قبل از این ما به شما چگونه باز کردن و بستن فایل را آموزش دادیم اما دستور Print# چه کار می کند ؟
این دستور می تواند داخل فایل هایی که باز هستند چیزی بنویسد
ساختمان دستورPrint#
Print#شماره فايل ,اسامي فيلدها
شماره فايل: فايلي است كه قبلاً به صورت Output و يا Append باز شده است
اسمامي فيلدها : اطلاعاتي است كه بايد در فايل نوشته شود.اسامي فيلدها را با كاما از هم جدا مي كنند در اين فرمان فيلدها در هنگام نوشتن در فايل ، با كاما از هم جدا ميشوند و فيلدهاي رشته اي در نقل قول قرار مي گيرند( مانند TextBox)
مثال: دو عدد Text با نام هاي Text1وText2 بر روي فرم تان قرار دهيد و يك Command بر روي فرم خود بگذاريد و كد زير را در command1 قرار دهيد:
Dim Filenum As integer
Filenum=FreeFile
Open"C:\book.dat"For Append As #Filenum
Print#Filenum,text1,text2
Close#Filenum
بعد از وارد كردن اطلاعات در text1وtext2 و زدن بر command تان به آدرس C:\book.dat برويد و آن فابل را مشاهده كنيد . حتماً اطلاعاتي را كه در Text1وtext2 وارد كرده بوديد را در آن خواهيد ديد.
آیتم های دستورPrint# (OutputListe)
تذکر:وجود این ایتم ها الزامی نیست
تذکر:از هر دو تابع هم زمان نمی توانید استفاده کنید
توابع توضیح
Spc() به مقدار داخل () بین خروجی ها فاصله می اندازد
Tab() محل چاپ خروجی در فایل ; عدد داخل پرانتز شماره ستون را مشخص میکند.
CharPos با این آیتم دستورPrint بعدی ادامه همان خط قرار می گیرد در صورتی که وجود نداشته باشد
دستور Print بعدی ابتدای خط بعدی قرار می گیرد.
Expression عبارت عددی یا رشته ای.
مثال:
Dim NumFi As Iinteger
NumFi=FreeFile
Open"test.txt"For Append As #NumFi
Print#NumFi,Spc(10),Text1.text
Close#NumFi
مثال های نمونه
مثال:این مثال محتویات داخل Text1 را در فایل text.txt که در درایو E قرار دارد ذخیره می کند
Private Sub Command1_Click()
Dim NumFi As Integer
NumFi=FreeFile
Open"E:\test.txt"For Append As #NumFi
Print#NumFi,Text1.text
Close#NumFi
End Sub
مثال با استفاده از دستور print برای نوشتن در یک فایل:
این برنامه معدل شما را محاسبه می کند و در فایل قرار می دهد و همچنین مکان ظاهر شدن خروجی را با فاصله 10 از ابتدای هر خط تعیین کرده است:
Private Sub Command1_Click()
Dim a, b, result As Single
Dim num As Integer
a = Val(Text1)
b = Val(Text2)
result = (a + b * 2) / 3
num = FreeFile
Open "E:\NewFile.txt" For Append As #num
Print #num,Spc(10),result
Close #num
End Sub
مثال با استفاده از دستور Print برای نوشتن در یک فایل :
این برنامه اعداد 2 تا 10 را دو تا دو تا ، در فایل به صورت افقی می نویسد
Private Sub Command1_Click()
Dim num As Integer
Dim shomar As Integer
shomar = FreeFile
Open "E:\Javad.txt" For output As #shomar
For num = 2 To 10 Step 2
Print #shomar, num;
Next num
Close #shomar
End Sub
حالا به آدرس E:\javad.txt برويد و آن فايل(javad) را باز كنيد اعداد10 8 6 4 2 را به صورت افقي مشاهده خواهيد كرد
حالا اگر ما به خواهیم خروجی برنامه هایمان را در خود برنامه ، در ویژوال بیسیک بیینم می توانیم از ابزارMicrusoft Rich Textbox control 6.0 استفاده کنیم اگر این ابزار در جعبه ابزار شما نبود باید آن را وارد کنید که آنرا در درس های پیش گفته ام اما دوباره یادآوری می کنم.
یادآوری: ابتدا وارد منوProject شوید بعد بر روی گزینه Components بروید و کلیک کنید یا می توانید از کلید میانبر Ctrl+T استفاده کنید و به دنبال Micrusoft Rich Textbox control 6.0 بگردید وقتی آنرا پیدا کرید آنرا با علامت تیک مشخص کنید و بر روی Ok کلیک کنید.
بعد از اینکه ابزار Rich Textbox را وارد جعبه ابزار خود کردید یک Rich Textbox بر روی فرم خود بکشید و در Form Load این را تایپ کنید:
Private Sub Form_Load()
RichTextBox1.FileName = "نام فایل"
End Sub
پس برنامه قبلی ما که نوشتن اعداد 2 تا 10 به صورت دوتادوتا رااگر بخواهیم درفرم برنامه خود در Rich Textbox نمایش دهیم باید اینگونه بنویسیم:
Private Sub Form_Load()
RichTextBox1.FileName = "E:\Javad.txt"
End Sub
نوشتن در فايل ترتيبي قسمت دوم( اين بار با دستور Write#)
براي نوشتن در يكه فايل ترتيبي كه توسط فرمان Open به صورت Output يا Append باز شده باشد، از فرمان Write#ياPrint# استفاده ميشود.كه فرمان Print# را به شما آموزش داده ايم.
فرمان Write# به صورت زير بكار مي رود:
Write#شماره فايل ,اسامي فيلدها
شماره فايل: فايلي است كه قبلاً به صورت Output و يا Append باز شده است
اسمامي فيلدها : اطلاعاتي است كه بايد در فايل نوشته شود.اسامي فيلدها را با كاما از هم جدا مي كنند در اين فرمان فيلدها در هنگام نوشتن در فايل ، با كاما از هم جدا ميشوند و فيلدهاي رشته اي در نقل قول قرار مي گيرند.
مثال:دو عدد Text با نام هاي Text1وText2 بر روي فرم تان قرار دهيد و يك Command بر روي فرم خود بگذاريد و كد زير را در آن قرار دهيد :
Dim Filenum As integer
Filenum=FreeFile
Open"C:\book.dat"For Append As #Filenum
Write#Filenum,text1,text2
Close#Filenum
بعد از وارد كردن اطلاعات در text1وtext2 و زدن بر command تان به آدرس C:\book.dat برويد و آن فابل را مشاهده كنيد . حتماً اطلاعاتي را كه در Text1وtext2 وارد كرده بوديد را در آن خواهيد ديد.چون
اين دستور ، فايل book.dat را به صورت خروجي بازكرده اطلاعات ركورد آن را مي نويسد.
تفاوت هاي فرمان Write با Print :
اين است كه فرمانWrite باعث ميشود كه فيلدها در فايل ترتيبي با كاما از هم جدا شوند ولي در در فرمان Print# چنانچه فيلدها با كاما از يكديگر جدا شوند ، در هنگام نوشتن در فايل ، بين فيلدها 14 فاصله قرار مي گيرد.
خواندن ازفايل ترتيبي
دستور Input#
اين فرمان براي خواندن اطلاعات از فايل مورد استفاده قرار مي گيرد و به صورت زير بكار مي رود:
Input#شماره فايل ,متغير رشته اي
متغير رشته اي: متغيري است كه اطلاعات خوانده شده از فايل ترتيبي بايد در آن قرار گيرد
شماره فايل،شماره فايلي كه به صورت Inputباز شده است و اسامي فيلدها،ليستي از متغيرها هستند كه اطلاعات خوانده شده در آن قرارمي گيرد.
اسامي فيلدها بايد به ترتيب با ليست متغيرهايي كه در هنگام نوشتن اطلاعات در فايل استفاده شده اند، همنوع باشند.
در اين دستور چنانچه فيلدها در هنگام خواندن كمتر از تعداد فيلدهايي باشد كه تشكيل يك ركورد را مي دهند،فيلدهاي بعدي در فرمان Input# بعدي ظاهر خواهند شد.ولي چنانچه تعداد فيلدهايي كه در خواندن به كار مي رودند، بيشتر از تعداد فيلدهاي تشكيل دهنده يك ركورد باشد، به تعداد لازم از ركورد بعدي خوانده مي شوند
مثال مهم: برنامه زير اطلاعات را داخل Tex1وtext2 ر با استفاده از دستورWrite# داخل فايل مي نويسد وبا استفاده از دستور Input آن اطلاعات خوانده مي شود و داخل Text3وText4 نمايش داده مي شود:
4 عدد Textbox و دو عدد CommnaButton بر رو ي فرم برنامه تان قرار دهيد حال Commad1 دابل كليك كنيد و كد زير را در آن قرار دهيد:اين دكمه كار نوشتن درفايل را مي كند (با استفاده از دستورWrite#)
filenum = FreeFile
Open "C:\book.dat" For Output As #filenum
Write #filenum, Text1, Text2
Close #1
در Command2 دابل كليك كنيد و كد زير را در آن قرار دهيد:اين دكمه اطلاعات داخل فايل را مي خواند و به شما داخل Text3وText4 نمايش مي دهد(با استفاده از دستور #Input)
filenum = FreeFile
Open "C:\book.dat" For Input As #filenum
Do While Not EOF(filenum)
Input #filenum, G, f
Text3.Text = G
Text4.Text = f
Exit Do
Close #1
دستورات داخل Command2 ، فايلي را به صورت ورودي باز كرده اطلاعات يك ركورد آن را مي خواند.
دستور #Line Input
اين دستور براي خواندن يك سطر از فايل ترتيبي استفاده ميشود و به صورت زير بكار مي رود:
Line Input#شماره فايل ,متغير رشته اي
متغير رشته اي متغيري است كه اطلاعات خوانده شده از فايل ترتيبي بايد در آن قرار گيرد
دستور EOF
اين تابع براي تست شرط پايان فايل بكار مي رود .چنانچه اشاره گر فايل به انتهاي آن رسيده باشد اين تابع قدار true و گرنه False را بر مي گرداند اين تابع به صورت زير به كار مي رود.
EOF شماره فايل
مثال : دستور زير تعداد ركوردهاي فايل را شمرده و در label1 چاپ مي كند:
Open "book.dat"For input As #1
Line1=0
Do while Not EOF (1)
Line Input #1,A$
Label1.caption=Line1
برنامه هاي مديريت فايل و پوشه:
فرمان MkDir
با استفاده از اين فرمان مي توانيد پوشه اي را ايجاد كنيد.
اين فرمان به صورت زير به كار مي رود:
MkDir("آدرس ونام پوشه اي بايد ايجاد شود")
مثال:
MkDir("C:\shakhsi")
اين دستور يك پوشه با نام shakhsi در درايو C ايجاد مي كند.
فرمان Name
اين فرمان براي تغيير نام فايل هاي موجود در ديسك استفاده ميشود و به صورت زير به كار مي رود:
اين فرمان به صورت زير به كار مي رود:
Name "آدرس و نام فايل قبلي" As "نام فايل جديد"
در هنگام استفاده از اين دستور بايد به نكات زير توجه كرد:
1-فايل بسته باشد .
2-فايل اصلي و فايل تغيير نام يافته روي يك درايو قرار داشته باشد.
3-از اين فرمان نمي توان براي انتقال پوشته استفاده كرد.
مثال :
Name "C:\book.txt" As "mark.txt"
فرمانRmDir
با استفاده از اين فرمان مي توان پوشه اي را حذف كرد .
براي حذف پوشه بايد دو شرط را دارا باشد 1:پوشه خالي باشد 2:پوشه فعلي نباشد
فرمان RmDir به صورت زير به كار مي رود:
RmDir("آدرس و نام پوشه")
مثال:
RmDir("E:\file)
فرمان Kill
با استفاده از اين فرمان مي توان فايل يا فايل هاي موجود در بر روي ديسك را حذف كرد.
اين فرمان به صورت زير بكار مي رود:
Kill("آدرس ونام فايل يا فايل ها")
مثال دستور زير فايل هايي كه پسوند txt دارند را حذف مي كند:
Kill("*.txt")
نویسنده : محمد جواد شخصی خدابخش
تاریخ :30/12/1388 شمسی 2010 February 20 میلادی
ایمیل :mjshakhsi@yahoo.com
وبلاگ: http://www.shakhsi7270.blogfa.com