PDA

نسخه کامل مشاهده نسخه کامل : File IO Function



someone
23-09-2006, 23:22
سلام.
به طور خلاصه میشه گفت که:
File یک واحد مقدماتی از ذخیره سازی یا Storage هست و Computer رو قادر میکنه تا اطلاعات رو از هم تشخیص بده. File IO Function این اجازه رو به برنامه ها میده تا بتونن یک File روCreate یا Modify یا Open یا Delete کنه. همچنین این اجازه رو به برنامه ها میده که بتونن به اطلاعات System دسترسی داشته باشن. File IO Function همراه SDK منتشر شده و بشتر توابعش در Kernel32.Dll قرار داره.
.اصطلاحا به این توابع API گفته میشه Application Programming Interface
که مجموعه ای از توابع هست برای توسعه برنامه ها.
که پرکاربردترینش رو معرفی میکنم:

1-CopyFile
2-CreateDirectory
3-CreateFile
4-DeleteFile
5-GetCurrentDirectory
6-GetDiskFreeSpace
7-GetDriveType
8-GetFileAttributes
9-GetFileSize
10-GetFileType
11-GetLogicalDrives
12-GetLogicalDriveStrings
13-MoveFile
14-ReadFile
15-RemoveDirectory
16-WriteFile

1-CopyFile
همونطور که از اسم این تابع بر میآد برای copy کردن یهfile به کار میره که استفاده ازش هم بسیار راحت هست.این تابع 3 تا آرگومان داره که به صورت زیر هستند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول[/B] اسم وآدرس File نظر هست.
آرگومان دوم اسم وآدرس File هست که قرار Copyبشه.
آرگومان سوم اگه TRUE باشه اگه در محلی که قرار فایل اونجا کپی یشه فایلی با همون اسم وجود داشته باشه
عملیات لغو میشه و اگه FALSE باشه فایل رو Repalce میکنه.
و این هم یه نمونه از کاربردش:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

2- CreateDirectory
همون طور که از اسم این یکی هم پیداست برای ایجاد یک پوشه به کار میره:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول آدرس واسم پوشه مورد نظر هست.
آرگومان دوم هم مربوط میشه به خصوصیات امنیتی یا Security Attribute که اگه NULL باشه یه پوشه باخصوصیات Normal ایجاد میکنه.
و این هم یه نمونه از کاربردش:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدراستی یکی از مهمترین کارهایی که یه برنامه نویسی حرفه ای انجام میده error Handling هست.
GetLastError تابعی هست که شماره ی آخرین Error رو نشون میده که میشه مفهوم اون رو از روی جدول این تابع بدست آورد.



3-CreateFile
بطور ساده این تابع یه File ایجاد یا باز میکنه.اما در حقیقت تعریف کلی این تابع اینه که برای ایجاد یا باز کردن یکی از Object های زیر به کار میره و Handle ی رو برمیگردونه که اجازه ی دستزسی به Object مورد نظر رو میده.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیداین تابع دارای آرگومان های زیر هست:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول مربوط به اسم فایلی هست که قرار ایجاد یا باز بشه.
آرگومان دوم مربوط به نوع دسترسی به فایل هست که مثلا اگه GENERIC_READ باشه تنها اجازه ی خوندن رو میده واجازه تغییر در فایل رو نمیده.
آرگومان سوم وضعیت Sharing فایل رو بررسی می کنه.
آرگومان چهارم که مربوط به SecurityAttributes میشه که اجازه میده Handle برنامه توسط یه ChildProcess به ارث برده شه.
آرگومان پنجم وضعیت ایجاد یا باز کردن فایل رو بررسی میکنه مثلا CREATE_ALWAYS همیشه یه فایل ایجاد میکنه.
آرگومان ششم خصوصیات فایل رو مشخص میکنه مثلا FILE_ATTRIBUTE_HIDDEN یه فایل Hidden ایجاد میکنه.
آرگومان هفتم مربوط به handle یک Template file میشه.
این هم یه نمونه از کاربردهاش:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

4-DeleteFile
همون طور که از اسم این یکی هم پیداست برای delete کردن یک File به کار میره.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که خوشبختانه فقط یه آرگومان داره و مربوط میشه به اسم وآدرس فایل مورد نظر.
اگه مقدار برگشتی تابع غیر از 0 باشه delete کردن انجام شده.
این هم یه نمونه ازش:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

5-GetCurrentDirectory
همون طور که از اسم این یکی هم پیداست آدرس Directory جاری از برنامه ی در حال اجرا رو بر میگردونه.
که 2 تا آرگومان داره وبه شکل زیر تعریف شده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول size یه بافر هست که آدرس این پوشه در ش قرار میگیره.
آرگومان دوم خود بافر مربوطه هست.که این بافر باید LPWSTR باشه. میتونید از char[] هم استفاده کنید اما
Type casting یادتون نره.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این قسمت اول File IO Functions بود. سعی میکنم تا چند روز دیگه ادامش رو بذارم.
خوشحال میشم نظر بدید.
ممنون.

someone
24-09-2006, 16:08
دوباره سلام.
ادامه ی بحث:

6-GetDiskFreeSpace
این تابع اطلاعات موبوط به دیسک رو برمیگردونه.دارای 4 آرگومان هست و به شکل زیر تعریف میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آرگومان اول مربوط به پارتیشنی که می خواید size اش رو در بیارید میشه.
آرگومان دوم تعداد Sector هایی که در هر Cluster در پاتیشن مورد نظر داره درش قرار میگیره.
آرگومان سوم تعداد Byte هایی هست که در هر Sector این پارتیشن قرار داره.
آرگومان چهارم تعداد Cluster های خالی رو بر میگردونه
آرگومان پنجم تعدا کل Cluster ها رو بر میگردونه.
و اینم مثال برای استفاده از این تابع:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در ضمن در مورد __int64 این توضیح رو بدم که یک 64-bit Integer رو تعریف میکنه.و برای استفاده از این نوع در printf کافی از%I64u استفاده بشه.دلیل استفاده از u وجود unsigned هست.
برای بدست آوردن فضای خالی کافیه تعداد Cluster های خالی رو در تعداد Sector های هر Cluster و تعداد Byte های هر Sector ضرب کنیم.واضحه هست که جواب نهایی بر حسب Byte هست به این دلیل بر 1024 تقسیم میشه.


7- GetDriveType
این تابع تشخیص میده که نوع Disk Drive چیه.مثلا CDRom یا Removable و... هست.
دارای یک آرگومان هست وبه شکل زیر تعریف میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که این آرگومان مربوط به drive ی هست که میخواین نوعش رو پیدا کنید.مقدار برگشتی این تابع نوع Drive رو مشخص میکنه که میتونه یکی از موارد زیر باشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اینم مثال برای استفاده از این تابع:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



8- GetFileAttributes
این تابع خصوصیات یک File یا Directory ر. بر میگردونه.
یک آرگومان داره و به شکل زیر تعریف میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که این آرگومان اسم وآدرس File یا Directory ای هست که قرار خصوصیاتش نشون داده بشه.
مقدار برگشتی این تابع یک یا چند تا از مقادیر زیر میتونه باشه.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اینم یک مثال:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته توجه داشته باشید که این برنامه سختار مناسبی برای این کار نیست چون اگه یه File هم ReadOnly و هم Hidden باشه این برنامه تنها جروجی تابع رو که یه مقدار عددی هست رو بر میگردونه چون دو Flag باهم ترکیب شدن. اين دو پرچم با هم Or میشن.
قسمت بعدي رو هم در اولين فرست ميذارم.
خوشحال ميشم نظر بديد.
ممنون.

someone
26-09-2006, 18:24
دوباره سلام.

9- GetFileSize
همونطور که از اسمش پیداشت اندازه File رو بر یگردونه بر حسب Byte
این نابع دارای 2 آرگومان هست.
آرگومان اول Handle مربوط به File مورد نظر هست.
آرگومان دوم high-order word از اندازه ی File مورد نظر.
اگر این تابع نتونه اندازه ی فایل رو برگردونه مقدار برگشتیش برابر با INVALID_FILE_SIZE
میشه.
استفاده ازش هم راحت هست.این یه نمونه از کاربردش:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



10- GetFileType
نوع یک فایل رو بر میگردونه وفقط دارای یک آرگومان هست.که مربوط به Handle فایل مورد نظر میشه.
که مقدار برگشتی این تابع یکی از مقادیر زیر هست:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه توضیح کوچیک در مورد مقدار برگشتی این تابع بدم.
اولی که معلومه در باره ی نوع ناشناخته یک فایل هست.
دومی که یعنی یک فایل دیسک هست.
سومی یعنی یه کاراکتر فایل هست مثل LPT Device یا Console
چهارمی هم مربوط میشه به یک pipe named یا anonymous pipe
و مثال مربوط به این تابع:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

11- GetLogicalDrives
این تابع Drive هایی که در System وجود داره رو به صورت bitmask نشون میده.
منظور از bitmask اینه که مقدار Drive های موجود رو به صورت باینری نشون میده.
مثلا اگه سیستم شما دارای سه Drive به شکل زیر باشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مقدار خروجی این تابع به ین شکل هست. 00001101
که میتونید با نوشتن یه تابع این مقادیر رو پیدا کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته تابعی که نوشتم بهینه نیست و کد اضافی داره.شما میتونید بهینه اش کنید.

someone
27-09-2006, 02:43
12- GetLogicalDriveStrings
این تابع اسامی Drive هایی که روی سیستم دارید رو در Buffer قرار میده.
و نسبت به تابع قبلی کمی کار رو راحت تر میکنه. این تابع دو آرگومان داره و به شکل زیر تعریف میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول اندازه بافر مربوط هست.
آرگومان دوم خود بافر هست که از نوع LPTSTR هست.دقت کنید که این نوع در VS2005 به LPWSTR
تغییر کرده.این تغییر در بسیاری از API ها وجود داره.
اگر این تابع نتونه کارش رو انجام بده مقدار 0 رو بر میگردونه.
اینم یه مثال برای استفاده از این تابع:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

لطفا یکی یه نظر بده تا بدونم كارم فايده داشته يا نه.
انتقادي , پيشنهادي اگه داريد لطفا بذاريد.
ممنون.

someone
27-09-2006, 16:41
13-MoveFile
این تابع یک File یا Directory رو با تمام زیر مجموعه هاش رو Move میکنه
یا به عبارتی همون cut.
این تابع 2 آرگومان داره وبه شکل زیر تعریف میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول اسم و آدرس فایلی هست که قرار Move بشه.
آرگومان دوم اسم وآدرس جدید فایل مورد نظر هست.
اگه این تابع نتونه Move رو انجام بده مقدار 0 رو بر میگردونه یا به اصطلاح FALSE
یه نمونه از کاربردهاش :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



14-ReadFile
همونطور که از اسمش هم پیداست برای خواندن اطلاعات از یه فایل به کار میره. وشروع خوندش رو هم از شاخص File Pointer شروع میکنه.در حالت پیش فرض از ابتدا شروع به خوندن میکنه.
این تابع دارای 5 آرگومان هست وبه شکل زیر تعریف میشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آرگومان اول یک Handle به فایل مورد نظر هست.
آرگومان دوم بافری هست که اطلاعات در اون قرار میگیره.
آرگومان سوم تعداد بایت هایی هست که قرار خونده بشه.
آرگومان چهارم تعداد بایت های خونده شده هست.
آرگومان پنجم یکpointer به Overlapped Structure هست.

اگه عمل خوندن فایل با موفقیت مقدار برگشتی غیر از 0 هست.
اگه مقدار برگشتی غیر از 0 باشه و تعداد بایت های خونده شده 0 باشه یعنی عمل خوندن بیش از حد انجام شده.

یه مثال برای استفاده از این API

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دقت کنید که در این روش برای خواندن یه آرایه دینامیک روی Heap به اندازه ی File مورد نظر ایجاد شده.
این یکی از روش های خواندن هست.
فقط به یاد داشته باشید که باید Buffer رو با استفاده از delete از حافظه آزاد کنید.

someone
28-09-2006, 01:34
15-RemoveDirectory
برای delete کردن یکDirectory به کار میره.
دارای یک آرگومان هست و به شکل زیر تعریف شده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این آرگومان مربوط میشه به اسم وآدرس پوشه ی مورد نظر.
و مثال برای کار با این تابع:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته دقت کنید که Directory مورد نظر باید خالی باشه.


16-WriteFile
این تابع اطلاعات مورد نظر رو در یه فایل قرار میده. و از این تابع میتوان در
operation asynchronous و synchronous operation استفاده بشه.
این تابع دارای 5 آرگومان هست و بشکل زیر استفاده میشه.
در مورد synchronous یه توضیح کوتاه بدم. فرض کنید که برنامتون قرار همزمان چند کار انجام بده.وقتی تابعی بصورت synchronous تعریف شده به این منظور هست که هنگامی که این تابع مشغول فعالیت هست
مثلا داره اطلاعاتی رو در فایل مینویسه به برنامتون این اجازه رو میده که به سایر process ها هم برسه.
این یه تعریف ساده از synchronous هست.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرگومان اول یک Handle به فایل مورد نظر هست.
آرگومان دوم بافری هست که اطلاعات در اون قرار میگیره.
آرگومان سوم تعداد بایت هایی هست که قرار نوشته بشه.
آرگومان چهارم تعداد بایت های نوشته شده هست.
آرگومان پنجم یکpointer به Overlapped Structure هست.
اگه عمل خوندن فایل با موفقیت مقدار برگشتی غیر از 0 هست.

خب. میریم سر مثال:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


خب 16 از پركابردترين API ها رو در IO رو معرفي كردم.
اميدوارم توضيحات كافي و واضح بوده باشن.
خوشحال ميشم نظر بديد.
ممنون.

someone
19-10-2006, 00:59
كسي از اين topic استفاده كرده؟
اگه آره, topic چطور بوده؟ مشكلي نداشته؟
ممنون ميشم نظر بديد.
همين طور درباره system tray و common dialog و BrowseForFolder
ممنون.