تابع دوم
کد php:
FRESULT f_open (
FIL* FileObject, /* Pointer to the blank file object structure */
const TCHAR* FileName, /* Pointer to the file neme */
BYTE ModeFlags /* Mode flags */
);
(نوع دسترسي , نام فايل , اشاره گر فايل)f_open
هست
حالا اين تابع چيه به چه درد ميخوره؟
براي ايجاد يا باز کردن فايل به کار ميره
کجا بايد ازش استفاده کرد؟
قبل از خوندن يا نوشتن فايل بايد اون فايل حتما باز باشه يا ايجاد شده باشه و يا ايجاد شده و باز بشه
ورودي و خروجي هاش؟
سه تا ورودي داره
1- اشاره گر فايل FileObject يه اشاره گر به متغيري که بايد قبل از اين تابع از نوع استراکچر FIL تعريف شده باشه
2- اشاره گر اسم فايل FileName يه اشاره گر به متغيري که بايد قبل از اين تابع از نوع TCHAR تعريف و مقدا دهي شده باشه البته ميشه مستقيما
هم نام فايل رو در فلش تعريفش کرد يا مثل مثال پايين بصورت مستقيم وارد تابع کرد
3- نوع دسترسي ModeFlags يه متغير از نوع بايت هست که ميتونه 6 حالت مختلف داشته باشه
- FA_READ = 0x01 دسترسي براي فقط خواندن فايل
- FA_WRITE = 0x02 دسترسي براي فقط نوشتن فايل
- FA_OPEN_EXISTING = 0x00 دسترسي فقط براي باز کردن فايل
- FA_OPEN_ALWAYS = 0x10 فايل را در صورتي که وجود ندارد ايجاد ميکند در غير اين صورت از ادرس صفر فايل بازش ميکند
- FA_CREATE_NEW = 0x04 فقط فايل رو ايجاد ميکند در غير اين صورت FR_EXIST باز گردانده خواهد شد
- FA_CREATE_ALWAYS = 0x08 فقط فايل رو ايجاد ميکند در صورت وجود فايل اطلاعات فايل پاک خواهد شد
و يک خروجي خطا داره که 17 حالت داره
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_LOCKED, FR_NOT_ENOUGH_CORE, FR_TOO_MANY_OPEN_FILES
در مورد اين خطا ها بايد بگم کلا 20 نوع مختلف داره و در توابع مشترک هستند و هر تابه يه تعداد خواصي شو برميگردونه
پس بعد از اين براي خروجي توابع ميتونيد با چک کردن مقدارش بفهميد که تابع چه کاري کرده
- FR_OK = 0x00 عملکرد موفق ي(مشکلي نبوده و تابع به درستي اجرا شده)
- FR_DISK_ERR = 0x01 خطا در توابع ديسک (مشکلي در ارتباط با ديسک به وجود امده است) ديسک وجود ندارد
- FR_INT_ERR = 0x02 خطا در ساختار فت يا سرريز شدن مقادير متغير هاي FATFS يا FIL يا ديگر متغير هاي مرتبط
- FR_NOT_READY = 0x03 خطا در ديسک با لول پايين يا انيشيال نشدن درست ديسک با تابع disk_initialize منظور از لول پايين يعني ديسک وجود دارد ولي ارتباط درست نيست
- FR_NO_FILE = 0x04 فايل وجود ندارد
- FR_NO_PATH = 0x05 مسير داده شده درست نيست
- FR_INVALID_NAME = 0x06 رشته داده به عنوان نام مسير نامعتبر است
- FR_DENIED = 0x07 دسترسي به مورد با توجه به يکي از موارد زير محدود شده است
+ براي فايلي با ويژگي فقط خواندني حالت نوشتن يا باز را بنويسيد
+ حذف فايل يا دايرکتوري با ويژگي فقط خواندني
+ حذف دايرکتوري غير خالي يا دايرکتوري جاري
+ خواندن فايلي که بدون پرچم FA_READ باز شده باشه
+ نوشتن يا تغيير فايلي که بدون پرچم FA_WRITE باز شده باشه
+ ايجاد فايل يا دايرکتوري در درايو پر شده
+ حجم دايرکتوري ايجاد شده بيشتر از حجم خالي درايو باشد
- FR_EXIST = 0x08 اين يعني همنامي يا هر شي که داراي همين نام است و يا در حال حاضر موجود است
- FR_INVALID_OBJECT = 0x09 با توجه به ساختار فايل يا دايرکتوري شي نامعتبر است
- FR_WRITE_PROTECTED = 0x0A حفاظت شده در برابر هرگونه نوشتن
- FR_INVALID_DRIVE = 0x0B شماره درايو انتخاب شده نا معتبر است
- FR_NOT_ENABLED = 0x0C درايو مورد نظر توسط تابع f_mount تعريف نشده است
- FR_NO_FILESYSTEM = 0x0D درايو پارتيشن بندي نشده يا فرمت نا معتبر است
- FR_MKFS_ABORTED = 0x0E اندازه کلاستر براي اين ديسک نامعتبر است و زماني به وجود مي ايد که شماره کلاستر نزديک 0xFF7 يا 0xFFF7 باشد
- FR_TIMEOUT = 0x0F زمان پاسخ گويي به پايان رسيد ولي جوابي نيامد
- FR_LOCKED = 0x10 دسترسي به فايل توسط کنترل به اشتراک گذاري فايل رد شده است
- FR_NOT_ENOUGH_CORE = 0x11 به يکي دلايل زير حافظه به اندازه کافي براي عمليات وجود ندارد
+ بافري براي LFN تعريف نشده است
+ با توجه به اندازه جدول نياز به اندازه کافي است
- FR_TOO_MANY_OPEN_FILES = 0x12 تعداد فايل هاي باز شده به حداکثر رسيده و فايل بيشتر نمي توان باز کرد
- FR_INVALID_PARAMETER = 0x13 پارامتر داده شده نامعتبر است