精华内容
下载资源
问答
  • MTK 文件创建及读写

    2012-04-25 10:44:22
    9.2 文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。 MTK使用FAT文件系统,...首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来
    9.2
    文件读写
    在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。
    MTK使用FAT文件系统,对于模拟器文件系统放在目录plutommiWIN32FS下,如DRIVE_C、DRIVE_D等等。
    我们通过一系列实例来具体讲解文件的读写过程。
    ·
    创建目录
    首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:
    1. #include "fs_type.h"  
    2. #include "Fs_func.h "  
    3. #include "fs_errcode.h"  
    4. #include "SettingProfile.h"  
    5. #include "CommonScreens.h"  
    6.   
    7. #define MAX_FILENAME_LEN 40  
    8. #define FILE_PATH              L"E:FileTest"//文件路径  
    9.   
    10. S32 CreateFileDir(U16* DirName)  
    11. {  
    12.    FS_HANDLE fh;  
    13.    FS_DOSDirEntry           file_info;  
    14.    U16 filename[MAX_CUSTOM_FILENAME_LEN];  
    15.    fh = FS_FindFirst(DirName, FS_ATTR_DIR,0, &file_info, filename,MAX_CUSTOM_FILENAME_LEN);  
    16.    //如果系统已有该目录,就关闭先前的文件句柄  
    17.    if(fh >= FS_NO_ERROR)  
    18.    {  
    19.        FS_FindClose(fh);  
    20.        return fh;  
    21.    }  
    22.    else  
    23.    {  
    24.         //如果没找到目录则创建目录  
    25.         fh = FS_CreateDir(DirName);  
    26.         FS_FindClose(fh);  
    27.         return fh;                                 
    28.    }  
    29. }  
    30. //在屏幕函数中调用CreateFileDir  
    31. void EntryFirstAppScreen(void)  
    32. {  
    33.     FS_HANDLE    handleFind;  
    34.     FS_DOSDirEntry file_info;  
    35.     U16              filename[MAX_FILENAME_LEN];  
    36.     S32 i = 0;  
    37.     EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);  
    38.     entry_full_screen();  
    39.     clear_screen();  
    40.        //创建目录  
    41.     handleFind = CreateFileDir(L"E:FileTest");  
    42.     if(handleFind >= 0)  
    43.     {  
    44.      //只要创建成功,就显示一个弹出窗口,显示成功。  
    45.       DisplayPopup((PU8)GetString(STR_GLOBAL_OK), IMG_GLOBAL_OK,1, 1000, SUCCESS_TONE);  
    46.      //显示完毕,返回到Organizer界面。  
    47.      DeleteUptoScrID(ORGANIZER_SCREENID);  
    48.    }  
    49. }  
    50. 保存上述代码,编译运行模拟器。在屏幕显示弹出窗口之后,即可在模拟器的文件系统中找到新创建的目录FileTest.  
    51. plutommiWIN32FSDRIVE_EFileTest 创建成功。  
    52. 创建新文件  
    53. 在之前创建的目录中,搜索customFile.txt文件。  
    54. void EntryFirstAppScreen(void)  
    55. {  
    56.     FS_HANDLE       handleFind;  
    57.     FS_DOSDirEntry        file_info;  
    58.     U16                       filename[MAX_CUSTOM_FILENAME_LEN];  
    59.     S32 i = 0;  
    60.     EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);  
    61.     entry_full_screen();  
    62.     clear_screen();  
    63.     //创建目录    
    64.     handleFind = CreateFileDir(L"E:FileTest");   
    65.     if(handleFind >= 0)  
    66.     {  
    67.          handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);  
    68.      }  
    69.      else //创建失败  
    70.      {  
    71.           return;  
    72.      }  
    73.      FS_Close(handleFind);//再不需要的时候,一定要将句柄关闭释放。  
    74. }  
    75. 保存修改,编译运行模拟器。  
    76. 目录plutommiWIN32FSDRIVE_EFileTest下成功地生成了文件customFile.txt。  
    写入数据
    我们尝试写入一段学生数据信息到刚刚创建的文件中。
    学生数据包括:姓名,年龄,性别,学号,总成绩等。所以,使用一个结构体来存储。
    1. typedef struct  
    2. {  
    3. U8 stuName[16];  
    4. U8 stuAge;  
    5. U8 stuSex[8];  
    6. S32 stuNumber;  
    7. S16 stuScore;//上一次保存时候的记忆模式  
    8. } StudentData;  
    声明一个全局StudentData实例:
    StudentData stuData;
    定义一个函数,封装写操作:
    1. void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)  
    2. {  
    3.        FS_HANDLE WriteHandle;  
    4.        UINT Leng=0;  
    5.        WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);  
    6.        if (WriteHandle >=0)  
    7.       {  
    8.            FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);  
    9.            FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//  
    10.        }  
    11.        else  
    12.        {  
    13.             DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),IMG_GLOBAL_ACTIVATED,1, 2000, ERROR_TONE);  
    14.             DeleteNHistory(0);  
    15.         }  
    16.         FS_Close (WriteHandle);  
    17. }  
    接下来,我们想实现在当前屏幕中按左键就存储数据的功能。可不可以这样:
    SetLeftSoftkeyFunction(WriteStuData, KEY_EVENT_UP);
    表明上看起来似乎可行,但是当实际运行中,按左键存储的时候,系统会出现异常。
    这是由于函数SetLeftSoftkeyFunction的第一个参数是一个如下形式的函数指针:
    void SetLeftSoftkeyFunction(void (*f) (void), MMI_key_event_type k)
    可以看到函数指针void (*f) (void)已经明确了传入的函数的形式,即返回值和参数都为void的函数。
    所以,我们必须再封装一次:
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    上面代码中的stuData请一定要声明为全局变量。
    现在,我们就可以在按左键的时候正确调用写数据的函数,最终代码如下:
    1. typedef struct  
    2. {  
    3.     U8 stuName[16];  
    4.     U8 stuAge;  
    5.     U8 stuSex[8];  
    6.     S16 stuNumber;  
    7.     S16 stuScore;  
    8. } StudentData;  
    9. StudentData stuData; //声明一个全局实例  
    10.   
    11. void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)  
    12. {  
    13.     FS_HANDLE WriteHandle;  
    14.     UINT Leng=0;  
    15.     WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);  
    16.     if (WriteHandle >=0)  
    17.     {  
    18.          FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);  
    19.          FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//  
    20.      }  
    21.      else  
    22.      {  
    23.          DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),IMG_GLOBAL_ACTIVATED,1, 2000, ERROR_TONE);  
    24.          DeleteNHistory(0);  
    25.      }  
    26.      FS_Close (WriteHandle);  
    27. }  
    28. void SaveData(void)  
    29. {  
    30.     WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));  
    31. }  
    32. void EntryFirstAppScreen(void)  
    33. {  
    34.     FS_HANDLE    handleFind;  
    35.     FS_DOSDirEntry        file_info;  
    36.     U16          filename[MAX_CUSTOM_FILENAME_LEN];  
    37.     S32 i = 0;  
    38.   
    39.     EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);  
    40.     entry_full_screen();  
    41.     clear_screen();  
    42.     //测试用的数据  
    43.     strcpy(stuData.stuName , "chenzhipeng");  
    44.     stuData.stuAge = 25;  
    45.     strcpy(stuData.stuSex , "male");  
    46.     stuData.stuNumber = 10115;  
    47.     stuData.stuScore = 568;  
    48.     //创建目录  
    49.     handleFind = CreateFileDir(L"E:FileTest");  
    50.     if(handleFind >= 0)  
    51.     {  
    52.          handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);  
    53.     }  
    54.     else   
    55.     {  
    56.          return;  
    57.     }  
    58.     FS_Close(handleFind);  
    59.     SetLeftSoftkeyFunction(SaveData, KEY_EVENT_UP);  
    60.     gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);  
    61.     SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);  
    62. }  
    保存修改,编译并运行模拟器,进入屏幕,按左键后,即可在目录:
    plutommiWIN32FSDRIVE_EFileTest 中看到文件customFile.txt已被写入了内容。

    读取数据

    要读取数据,首先得确定文件是否存在。

    handleFind = FS_FindFirst(L"E:FileTest*.txt", 0, 0, &file_info,(U16*)fileName, MAX_CUSTOM_FILENAME_LEN);

    FS_FindClose(handleFind);

    上面的代码,在目录FileTest下查找后缀名为txt的文件。如果找到就将文件名赋值给fileName,并将该文件信息赋值给file_info

    只要是handleFind不小于0,且文件名也和我们之前已创建的相同,就说明文件已经找到。接下来要做的就是读取:

    清空EntryFirstAppScreen函数先前的代码,然后添加读代码:

    展开全文
  • 9.2 文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。 MTK使用FAT文件系统,...首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来
    9.2
    文件读写
    在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。
    MTK使用FAT文件系统,对于模拟器文件系统放在目录plutommiWIN32FS下,如DRIVE_C、DRIVE_D等等。
    我们通过一系列实例来具体讲解文件的读写过程。
    ·
    创建目录
    首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:
    #include "fs_type.h"
    #include "Fs_func.h "
    #include "fs_errcode.h"
    #include "SettingProfile.h"
    #include "CommonScreens.h"
    
    #define MAX_FILENAME_LEN 40
    #define FILE_PATH              L"E:FileTest"//文件路径
    
    S32 CreateFileDir(U16* DirName)
    {
       FS_HANDLE fh;
       FS_DOSDirEntry           file_info;
       U16 filename[MAX_CUSTOM_FILENAME_LEN];
       fh = FS_FindFirst(DirName, FS_ATTR_DIR,0, &file_info, filename,MAX_CUSTOM_FILENAME_LEN);
       //如果系统已有该目录,就关闭先前的文件句柄
       if(fh >= FS_NO_ERROR)
       {
           FS_FindClose(fh);
           return fh;
       }
       else
       {
            //如果没找到目录则创建目录
            fh = FS_CreateDir(DirName);
            FS_FindClose(fh);
            return fh;                               
       }
    }
    //在屏幕函数中调用CreateFileDir
    void EntryFirstAppScreen(void)
    {
        FS_HANDLE    handleFind;
        FS_DOSDirEntry file_info;
        U16              filename[MAX_FILENAME_LEN];
        S32 i = 0;
        EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
        entry_full_screen();
        clear_screen();
           //创建目录
        handleFind = CreateFileDir(L"E:FileTest");
        if(handleFind >= 0)
        {
         //只要创建成功,就显示一个弹出窗口,显示成功。
          DisplayPopup((PU8)GetString(STR_GLOBAL_OK), IMG_GLOBAL_OK,1, 1000, SUCCESS_TONE);
         //显示完毕,返回到Organizer界面。
         DeleteUptoScrID(ORGANIZER_SCREENID);
       }
    }
    保存上述代码,编译运行模拟器。在屏幕显示弹出窗口之后,即可在模拟器的文件系统中找到新创建的目录FileTest.
    plutommiWIN32FSDRIVE_EFileTest 创建成功。
    创建新文件
    在之前创建的目录中,搜索customFile.txt文件。
    void EntryFirstAppScreen(void)
    {
        FS_HANDLE       handleFind;
        FS_DOSDirEntry        file_info;
        U16                       filename[MAX_CUSTOM_FILENAME_LEN];
        S32 i = 0;
        EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
        entry_full_screen();
        clear_screen();
        //创建目录  
        handleFind = CreateFileDir(L"E:FileTest"); 
        if(handleFind >= 0)
        {
             handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
         }
         else //创建失败
         {
              return;
         }
         FS_Close(handleFind);//再不需要的时候,一定要将句柄关闭释放。
    }
    保存修改,编译运行模拟器。
    目录plutommiWIN32FSDRIVE_EFileTest下成功地生成了文件customFile.txt。
    
    写入数据
    我们尝试写入一段学生数据信息到刚刚创建的文件中。
    学生数据包括:姓名,年龄,性别,学号,总成绩等。所以,使用一个结构体来存储。
    typedef struct
    {
    U8 stuName[16];
    U8 stuAge;
    U8 stuSex[8];
    S32 stuNumber;
    S16 stuScore;//上一次保存时候的记忆模式
    } StudentData;
    声明一个全局StudentData实例:
    StudentData stuData;
    定义一个函数,封装写操作:
    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
           FS_HANDLE WriteHandle;
           UINT Leng=0;
           WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
           if (WriteHandle >=0)
          {
               FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
               FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
           }
           else
           {
                DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),IMG_GLOBAL_ACTIVATED,1, 2000, ERROR_TONE);
                DeleteNHistory(0);
            }
            FS_Close (WriteHandle);
    }
    接下来,我们想实现在当前屏幕中按左键就存储数据的功能。可不可以这样:
    SetLeftSoftkeyFunction(WriteStuData, KEY_EVENT_UP);
    表明上看起来似乎可行,但是当实际运行中,按左键存储的时候,系统会出现异常。
    这是由于函数SetLeftSoftkeyFunction的第一个参数是一个如下形式的函数指针:
    void SetLeftSoftkeyFunction(void (*f) (void), MMI_key_event_type k)
    可以看到函数指针void (*f) (void)已经明确了传入的函数的形式,即返回值和参数都为void的函数。
    所以,我们必须再封装一次:
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    上面代码中的stuData请一定要声明为全局变量。
    现在,我们就可以在按左键的时候正确调用写数据的函数,最终代码如下:
    typedef struct
    {
        U8 stuName[16];
        U8 stuAge;
        U8 stuSex[8];
        S16 stuNumber;
        S16 stuScore;
    } StudentData;
    StudentData stuData; //声明一个全局实例
    
    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
        FS_HANDLE WriteHandle;
        UINT Leng=0;
        WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
        if (WriteHandle >=0)
        {
             FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
             FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
         }
         else
         {
             DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),IMG_GLOBAL_ACTIVATED,1, 2000, ERROR_TONE);
             DeleteNHistory(0);
         }
         FS_Close (WriteHandle);
    }
    void SaveData(void)
    {
        WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    void EntryFirstAppScreen(void)
    {
        FS_HANDLE    handleFind;
        FS_DOSDirEntry        file_info;
        U16          filename[MAX_CUSTOM_FILENAME_LEN];
        S32 i = 0;
    
        EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
        entry_full_screen();
        clear_screen();
        //测试用的数据
        strcpy(stuData.stuName , "chenzhipeng");
        stuData.stuAge = 25;
        strcpy(stuData.stuSex , "male");
        stuData.stuNumber = 10115;
        stuData.stuScore = 568;
        //创建目录
        handleFind = CreateFileDir(L"E:FileTest");
        if(handleFind >= 0)
        {
             handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
        }
        else 
        {
             return;
        }
        FS_Close(handleFind);
        SetLeftSoftkeyFunction(SaveData, KEY_EVENT_UP);
        gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);
        SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);
    }
    保存修改,编译并运行模拟器,进入屏幕,按左键后,即可在目录:
    plutommiWIN32FSDRIVE_EFileTest 中看到文件customFile.txt已被写入了内容。

    读取数据

    要读取数据,首先得确定文件是否存在。

    handleFind = FS_FindFirst(L"E:FileTest*.txt", 0, 0, &file_info,(U16*)fileName, MAX_CUSTOM_FILENAME_LEN);

    FS_FindClose(handleFind);

    上面的代码,在目录FileTest下查找后缀名为txt的文件。如果找到就将文件名赋值给fileName,并将该文件信息赋值给file_info

    只要是handleFind不小于0,且文件名也和我们之前已创建的相同,就说明文件已经找到。接下来要做的就是读取:

    清空EntryFirstAppScreen函数先前的代码,然后添加读代码:

     

    转载:

     http://apps.hi.baidu.com/share/detail/20760750

    展开全文
  • (转载) MTK 文件管理

    2012-05-03 16:44:00
    文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件...·创建目录首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:#include ...

    文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。
    MTK使用FAT文件系统,对于模拟器文件系统放在目录plutommiWIN32FS下,如DRIVE_C、DRIVE_D等等。
    我们通过一系列实例来具体讲解文件的读写过程。
    ·
    创建目录
    首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:
    #include "fs_type.h"
    #include "Fs_func.h "
    #include "fs_errcode.h"
    #include "SettingProfile.h"
    #include "CommonScreens.h"

    #define MAX_FILENAME_LEN 40
    #define FILE_PATH              L"E:FileTest"//文件路径

    S32 CreateFileDir(U16* DirName)
    {
       FS_HANDLE fh;
       FS_DOSDirEntry           file_info;
       U16 filename[MAX_CUSTOM_FILENAME_LEN];
       fh = FS_FindFirst(DirName, FS_ATTR_DIR,
    0, &file_info, filename,MAX_CUSTOM_FILENAME_LEN);
       //如果系统已有该目录,就关闭先前的文件句柄
       if(fh >= FS_NO_ERROR)
       {
                   FS_FindClose(fh);
                   return fh;
       }
       else
       {
                   //如果没找到目录则创建目录
                   fh = FS_CreateDir(DirName);
                   FS_FindClose(fh);
                   return fh;                              
       }
    }
    //在屏幕函数中调用CreateFileDir
    void EntryFirstAppScreen(void)
    {
    FS_HANDLE    handleFind;
    FS_DOSDirEntry file_info;
    U16              filename[MAX_FILENAME_LEN];
    S32 i = 0;
    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();
           //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
           {
    //只要创建成功,就显示一个弹出窗口,显示成功。
          DisplayPopup((PU8)GetString(STR_GLOBAL_OK), IMG_GLOBAL_OK,
    1, 1000, SUCCESS_TONE);
    //显示完毕,返回到Organizer界面。
    DeleteUptoScrID(ORGANIZER_SCREENID);
       }
    }
    保存上述代码,编译运行模拟器。在屏幕显示弹出窗口之后,即可在模拟器的文件系统中找到新创建的目录FileTest.
    plutommiWIN32FSDRIVE_EFileTest 创建成功。
    ·
    创建新文件
    在之前创建的目录中,搜索customFile.txt文件。
    void EntryFirstAppScreen(void)
    {

    FS_HANDLE       handleFind;
    FS_DOSDirEntry        file_info;
    U16                       filename[MAX_CUSTOM_FILENAME_LEN];
    S32 i = 0;
    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();

             //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
             {
    handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
             }
             else //创建失败
             {
                         return;
             }
    FS_Close(handleFind);//再不需要的时候,一定要将句柄关闭释放。
    }
    保存修改,编译运行模拟器。
    目录plutommiWIN32FSDRIVE_EFileTest下成功地生成了文件customFile.txt。
    ·
    写入数据
    我们尝试写入一段学生数据信息到刚刚创建的文件中。
    学生数据包括:姓名,年龄,性别,学号,总成绩等。所以,使用一个结构体来存储。
    typedef struct
    {
    U8 stuName[16];
    U8 stuAge;
    U8 stuSex[8];
    S32 stuNumber;
    S16 stuScore;//上一次保存时候的记忆模式
    } StudentData;
    声明一个全局StudentData实例:
    StudentData stuData;
    定义一个函数,封装写操作:
    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
           FS_HANDLE WriteHandle;
                         UINT Leng=0;
                         WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
                         if (WriteHandle >=0)
                         {
                                     FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
                                     FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
                         }
                         else
                         {
    DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),
    IMG_GLOBAL_ACTIVATED,
    1, 2000, ERROR_TONE);
                       DeleteNHistory(0);
                         }
                         FS_Close (WriteHandle);
    }
    接下来,我们想实现在当前屏幕中按左键就存储数据的功能。可不可以这样:
    SetLeftSoftkeyFunction(WriteStuData, KEY_EVENT_UP);
    表明上看起来似乎可行,但是当实际运行中,按左键存储的时候,系统会出现异常。
    这是由于函数SetLeftSoftkeyFunction的第一个参数是一个如下形式的函数指针:
    void SetLeftSoftkeyFunction(void (*f) (void), MMI_key_event_type k)
    可以看到函数指针void (*f) (void)已经明确了传入的函数的形式,即返回值和参数都为void的函数。
    所以,我们必须再封装一次:
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    上面代码中的stuData请一定要声明为全局变量。
    现在,我们就可以在按左键的时候正确调用写数据的函数,最终代码如下:
    typedef struct
    {
    U8 stuName[16];
    U8 stuAge;
    U8 stuSex[8];
    S16 stuNumber;
    S16 stuScore;
    } StudentData;

    StudentData stuData; //声明一个全局实例

    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
    FS_HANDLE WriteHandle;
    UINT Leng=0;
    WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
    if (WriteHandle >=0)
    {
                         FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
                         FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
             }
             else
             {
    DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),
    IMG_GLOBAL_ACTIVATED,
    1, 2000, ERROR_TONE);
                    DeleteNHistory(0);
             }
             FS_Close (WriteHandle);
    }
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    void EntryFirstAppScreen(void)
    {
       FS_HANDLE    handleFind;
    FS_DOSDirEntry        file_info;
    U16          filename[MAX_CUSTOM_FILENAME_LEN];
    S32 i = 0;

    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();
    //测试用的数据
    strcpy(stuData.stuName , "chenzhipeng");
    stuData.stuAge = 25;
    strcpy(stuData.stuSex , "male");
    stuData.stuNumber = 10115;
    stuData.stuScore = 568;
    //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
    {
             handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
    }
    else
    {
             return;
    }
       FS_Close(handleFind);
    SetLeftSoftkeyFunction(SaveData, KEY_EVENT_UP);
    gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);
    SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);
    }
    保存修改,编译并运行模拟器,进入屏幕,按左键后,即可在目录:
    plutommiWIN32FSDRIVE_EFileTest 中看到文件customFile.txt已被写入了内容。

    ·
    读取数据

    要读取数据,首先得确定文件是否存在。

    handleFind = FS_FindFirst(L"E:FileTest*.txt", 0, 0, &file_info,

     

    (U16*)fileName, MAX_CUSTOM_FILENAME_LEN);


    FS_FindClose(handleFind);

    上面的代码,在目录FileTest下查找后缀名为txt的文件。如果找到就将文件名赋值给fileName,并将该文件信息赋值给file_info。

    只要是handleFind不小于0,且文件名也和我们之前已创建的相同,就说明文件已经找到。接下来要做的就是读取:

    清空EntryFirstAppScreen函数先前的代码,然后添加读代码:

    转载于:https://www.cnblogs.com/sierllen/archive/2012/05/03/2480835.html

    展开全文
  • 9.2文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写...·创建目录首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:#inclu
    9.2
    文件读写
    在任何平台上开发应用程序,最基础的就是文件的输入输出。任何需要持久化存储的数据,都离不开文件读写。
    MTK使用FAT文件系统,对于模拟器文件系统放在目录plutommiWIN32FS下,如DRIVE_C、DRIVE_D等等。
    我们通过一系列实例来具体讲解文件的读写过程。
    ·
    创建目录
    首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能:
    #include "fs_type.h"
    #include "Fs_func.h "
    #include "fs_errcode.h"
    #include "SettingProfile.h"
    #include "CommonScreens.h"

    #define MAX_FILENAME_LEN 40
    #define FILE_PATH              L"E:FileTest"//文件路径

    S32 CreateFileDir(U16* DirName)
    {
       FS_HANDLE fh;
       FS_DOSDirEntry           file_info;
       U16 filename[MAX_CUSTOM_FILENAME_LEN];
       fh = FS_FindFirst(DirName, FS_ATTR_DIR,
    0, &file_info, filename,MAX_CUSTOM_FILENAME_LEN);
       //如果系统已有该目录,就关闭先前的文件句柄
       if(fh >= FS_NO_ERROR)
       {
                   FS_FindClose(fh);
                   return fh;
       }
       else
       {
                   //如果没找到目录则创建目录
                   fh = FS_CreateDir(DirName);
                   FS_FindClose(fh);
                   return fh;                              
       }
    }
    //在屏幕函数中调用CreateFileDir
    void EntryFirstAppScreen(void)
    {
    FS_HANDLE    handleFind;
    FS_DOSDirEntry file_info;
    U16              filename[MAX_FILENAME_LEN];
    S32 i = 0;
    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();
           //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
           {
    //只要创建成功,就显示一个弹出窗口,显示成功。
          DisplayPopup((PU8)GetString(STR_GLOBAL_OK), IMG_GLOBAL_OK,
    1, 1000, SUCCESS_TONE);
    //显示完毕,返回到Organizer界面。
    DeleteUptoScrID(ORGANIZER_SCREENID);
       }
    }
    保存上述代码,编译运行模拟器。在屏幕显示弹出窗口之后,即可在模拟器的文件系统中找到新创建的目录FileTest.
    plutommiWIN32FSDRIVE_EFileTest 创建成功。
    ·
    创建新文件
    在之前创建的目录中,搜索customFile.txt文件。
    void EntryFirstAppScreen(void)
    {

    FS_HANDLE       handleFind;
    FS_DOSDirEntry        file_info;
    U16                       filename[MAX_CUSTOM_FILENAME_LEN];
    S32 i = 0;
    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();

             //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
             {
    handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
             }
             else //创建失败
             {
                         return;
             }
    FS_Close(handleFind);//再不需要的时候,一定要将句柄关闭释放。
    }
    保存修改,编译运行模拟器。
    目录plutommiWIN32FSDRIVE_EFileTest下成功地生成了文件customFile.txt。
    ·
    写入数据
    我们尝试写入一段学生数据信息到刚刚创建的文件中。
    学生数据包括:姓名,年龄,性别,学号,总成绩等。所以,使用一个结构体来存储。
    typedef struct
    {
    U8 stuName[16];
    U8 stuAge;
    U8 stuSex[8];
    S32 stuNumber;
    S16 stuScore;//上一次保存时候的记忆模式
    } StudentData;
    声明一个全局StudentData实例:
    StudentData stuData;
    定义一个函数,封装写操作:
    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
           FS_HANDLE WriteHandle;
                         UINT Leng=0;
                         WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
                         if (WriteHandle >=0)
                         {
                                     FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
                                     FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
                         }
                         else
                         {
    DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),
    IMG_GLOBAL_ACTIVATED,
    1, 2000, ERROR_TONE);
                       DeleteNHistory(0);
                         }
                         FS_Close (WriteHandle);
    }
    接下来,我们想实现在当前屏幕中按左键就存储数据的功能。可不可以这样:
    SetLeftSoftkeyFunction(WriteStuData, KEY_EVENT_UP);
    表明上看起来似乎可行,但是当实际运行中,按左键存储的时候,系统会出现异常。
    这是由于函数SetLeftSoftkeyFunction的第一个参数是一个如下形式的函数指针:
    void SetLeftSoftkeyFunction(void (*f) (void), MMI_key_event_type k)
    可以看到函数指针void (*f) (void)已经明确了传入的函数的形式,即返回值和参数都为void的函数。
    所以,我们必须再封装一次:
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    上面代码中的stuData请一定要声明为全局变量。
    现在,我们就可以在按左键的时候正确调用写数据的函数,最终代码如下:
    typedef struct
    {
    U8 stuName[16];
    U8 stuAge;
    U8 stuSex[8];
    S16 stuNumber;
    S16 stuScore;
    } StudentData;

    StudentData stuData; //声明一个全局实例

    void WriteStuData(U16 *FileName,void *DataPtr,S32 offSet,UINT DataSize)
    {
    FS_HANDLE WriteHandle;
    UINT Leng=0;
    WriteHandle = FS_Open(FileName,FS_CREATE|FS_READ_WRITE);
    if (WriteHandle >=0)
    {
                         FS_Seek(WriteHandle, offSet, FS_FILE_BEGIN);
                         FS_Write(WriteHandle,DataPtr,DataSize,&Leng);//
             }
             else
             {
    DisplayPopup((PU8)GetString(STR_GLOBAL_ERROR),
    IMG_GLOBAL_ACTIVATED,
    1, 2000, ERROR_TONE);
                    DeleteNHistory(0);
             }
             FS_Close (WriteHandle);
    }
    void SaveData(void)
    {
    WriteStuData(L"E:FileTestcustomFile.txt",&stuData,0,sizeof(StudentData));
    }
    void EntryFirstAppScreen(void)
    {
       FS_HANDLE    handleFind;
    FS_DOSDirEntry        file_info;
    U16          filename[MAX_CUSTOM_FILENAME_LEN];
    S32 i = 0;

    EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
    entry_full_screen();
    clear_screen();
    //测试用的数据
    strcpy(stuData.stuName , "chenzhipeng");
    stuData.stuAge = 25;
    strcpy(stuData.stuSex , "male");
    stuData.stuNumber = 10115;
    stuData.stuScore = 568;
    //创建目录
    handleFind = CreateFileDir(L"E:FileTest");
    if(handleFind >= 0)
    {
             handleFind = FS_Open(L"E:FileTestcustomFile.txt",FS_CREATE|FS_READ_WRITE);
    }
    else
    {
             return;
    }
       FS_Close(handleFind);
    SetLeftSoftkeyFunction(SaveData, KEY_EVENT_UP);
    gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);
    SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);
    }
    保存修改,编译并运行模拟器,进入屏幕,按左键后,即可在目录:
    plutommiWIN32FSDRIVE_EFileTest 中看到文件customFile.txt已被写入了内容。

    ·
    读取数据

    要读取数据,首先得确定文件是否存在。

    handleFind = FS_FindFirst(L"E:FileTest*.txt", 0, 0, &file_info,



    (U16*)fileName, MAX_CUSTOM_FILENAME_LEN);


    FS_FindClose(handleFind);

    上面的代码,在目录FileTest下查找后缀名为txt的文件。如果找到就将文件名赋值给fileName,并将该文件信息赋值给file_info

    只要是handleFind不小于0,且文件名也和我们之前已创建的相同,就说明文件已经找到。接下来要做的就是读取:

    清空EntryFirstAppScreen函数先前的代码,然后添加读代码:

     

    转载:

     http://apps.hi.baidu.com/share/detail/20760750

     

     

    展开全文
  • 第一步,点“开始/运行”...如在E盘根目录下创建abc文件夹,键入以下内容:MD E:/abc../ 后回车; 第三步,在E盘根目录下的abc.文件夹上双击,你会发现根本打不开,并会弹出提示,和楼主的类似. 第四步,点“开始/运行
  • 不用任何软件用cmd的命令加密winXP文件夹 ...用cmd的命令就可以删除啊,rd 就可以了 不靠软件直接给文件...如在E盘根目录下创建abc文件夹,键入以下内容:MD E:\abc..\ 后,回车; 第三步,在E盘根目录下的a...
  • MTK文件读写2

    2010-11-26 12:40:00
    文件读写在任何平台上开发应用程序,最基础的就是文件的输入输出... · 创建目录 首先在E盘根目录下创建文件夹FileTest。编写一个函数CreateFileDir来实现该功能: #include "fs_type.h"<br
  • 安装Win 7时,系统会自动为我们创建一个名为“公用”的用户,同时,还会硬盘上创建名为“公用”的文件夹前面的设置中,我们已... 我们以将一台电脑的E盘根目录下的Share文件夹进行共享为例。首先鼠标右键单
  •  例如:在e盘根目录(\)下面创建一个名为Hello的文件夹;  使用md指令:如图    在e盘中会生成一个名为Hello的文件夹。 2:创建java文件;  进入Hello文件夹创建一个hello.java文件  使用dir查看目录...
  • 廖雪峰Python教学笔记 又来补基础了....每上一堂课,越发觉得基础差啊....WTF... 这章节将的是通过命令来创建目录,文件,子目录等动作,...随后在E盘根目录下就生成了相应的文件夹 然后对应的删除的命令是o
  • Oracle数据泵DMP文件的导入及导出

    千次阅读 2018-04-11 15:16:15
    导入操作(本次示例是...1、在被导入的数据库创建操作目录 1.1、在E盘根目录下创建dump文件夹(将数据泵文件都放到此目录(e:\dump)下) 1.2、用系统管理员登录数据库,在SQL执行器中执行如下命令 create directory d...
  • 下载的opencv2.4.6.exe相当于一个压缩文件,将文件夹放到合适位置,配置时需要使用 bin lib include staticlib 四个文件夹,以将这四个文件夹放到E盘根目录下OpenCV文件夹中为例,环境变量PATH中加入bin所在目录。...
  • 在Windows 7碰到一个奇怪的问题,DE二个盘,NTFS的权限(属性--安全页)一模一样,没有任何区别,但在E盘根目录可以创建文件或文件夹,而在D盘根目录下报错:0x80070522,如果使用应用程序将文件保存到D盘根目录,则...
  • oracle数据泵导入导出dmp文件语法

    千次阅读 2020-10-01 21:34:30
    1.1、在E盘根目录下创建dump文件夹(将数据泵文件都放到此目录(e:\dump)下) 1.2、用系统管理员登录数据库,在SQL执行器中执行如下命令 create directory dump_dir as 'e:\dump'; 2、创建表空间(sql执行器中执行如下...
  • 配置Tomcat虚拟路径

    2021-02-24 23:45:07
    1.E盘根目录下创建demo文件夹(E:\demo)。复制Tomcat目录下的webapps\ROOT中的WEB-INFO文件夹到demo文件夹。 (里面带有一个web.xml文件) 2.tomcat\conf下server.xml中找到 <Host name="localhost" appBase=...
  • 1.安装 官网下载 一步一步 安装即可 (下载.msi文件 ) ...3.c盘根目录下 创建一个data 文件夹 data文件夹创建db文件夹 (这个也不是必须c盘下面创建 默认是c) 修改数据存放路径 : mongod -...
  • 首先去sqlite官网下载sqlite,下载地址:SQLite 下载页面 需要下载 sqlite-tools-win32-*.zip 和 ...D盘或者E盘根目录下创建sqlite文件夹,然后配置PATH环境变量,直接后面加d:\sqlite或者e:\sqlite 打开sq...
  • 1.找一个硬盘根目录,比如这里我使用E盘,在E盘根目录创建一个php的文件夹,进入php文件夹,如图所示 2.在步骤1的php文件夹下再建立一个文件夹php_dev,如图所示 3.进入php_dev文件夹,将 PHP开发...
  • 1. 先创建保存日志的文件夹(如在E:盘根目录下创建名为mysql-logs的日志文件夹) 2. 在mysql安装文件下找到my.ini,打开后找到[mysqld]字段,在下面空白处添加下列内容: log-error="E:/mysql-logs/error.log" #...
  • Maven入门教程(三)-配置本地仓库

    千次阅读 2019-05-13 23:17:19
    Maven本地仓库的作用: 用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库...1)自定义创建一个存放jar包的本地仓库,比如我在e盘根目录下创建一个本地仓库,文件夹名称为 ...
  • 桂林电子科技大学试卷 2014-2015 学年第 2 学期 课程名称 C 语言程序设计 B 实验适用年级 2014 考试时间 60 分钟 试卷编号 A20151001 考前准备 请 E 盘根目录下建一个以自己学号命名的文件夹 试题中的所有程序所...
  • 桂林电子科技大学试卷 2014-2015 学年第 2 学期 课程名称 C 语言程序设计 B 实验适用年级 2014 考试时间 60 分钟 试卷编号 A20151001 考前准备 请 E 盘根目录下建一个以自己学号命名的文件夹 试题中的所有程序所...
  • 我的开发工具和环境VS2005,WinXP professional,SQLSERVER2000过程描述:我的IIS主目录设置在D:/盘根目录创建的WEB项目在E:/work/projects/appname下。在IIS主目录下定义了一个虚拟目录--appname,并把这个虚拟...
  • 第一步、在E下创建一个文件夹,随便取个名字,或者默认为【新建文件夹】(此处以E盘为例)注意:这里要着重强调一下修改后的桌面位置是E盘下的一个子文件夹,而不是E盘根目录,这点很重要第二步、修改桌面新的位置...
  • Windows10安装mysql8.0

    2019-11-24 20:18:56
    2:将解压文件解压到你安装的目录:E:\mysql-8.0.11-winx64 (我这是放在E盘根目录,不要放在有中文名字和空格的的目录下。 3:mysql-8.0.11-winx64文件夹下面新建一个my.ini文件和一个data文件夹 这里需要注意...
  • 2、解压ZIP文件并放到指定的目录(我放到了e盘根目录下),解压完成后的文件夹里面创建my.ini文件,为数据库配置文件 my.ini文件内容如下: [client] # 设置mysql客户端默认字符集 default-character-set=utf...
  • C盘下创建flashcam文件夹(可直接复制压缩包内flashcam文件夹到C盘根目录C:\flashcam),直接写入要拉流的地址,如:rtsp://.......,也可以是本地的mp4文件地址,如:e:\1.mp4,然后直接运行“reg.bat”,注册...
  • 此项目允许您去选择 [ENABLED],以让您DOS环境可以使用USB键盘,或是选择 [OS] 以OS环境使用。默认情况是关闭的即:[DISABLED],只有打开DOS才可以用。 USB Mouse Support Via: 此项目允许您去...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

在e盘根目录下创建文件夹