WinCE 文件操作(引用)

来源:互联网 发布:阿里云199元试用一年 编辑:程序博客网 时间:2024/05/16 05:48

WinCE 文件操作(引用)

http://www.cnblogs.com/mugua/archive/2009/03/17/1413930.html

常用的三种方法,归纳如下:

方法一 使用MFC的CFile类
     打开用Open,关闭用Close(),文件指针移动用Seek,读文件用Read(),写文件用Write,获取文件属性可以使用GetFileStatus方法,这个可以查看MSDN,下面给几行简单代码:

CFile file;bool isOpenOK = file.Open(L"\\flash disk\\flyfox\\test.txt", CFile::typeBinary|CFile::modeRead);//返回真表示读成功if (isOpenOK){    char buffer[1024];    file.Seek (10L, CFile::begin);    DWORD readCount = file.Read(fileBuffer, 1024); // 返回实际读到的字节数}file.Close ();
 

方法二 基于C的使用FILE结构体
1、打开文件使用_wfopen,原型如下:
FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );
第二个参数是打开模式,这里有很多,比如r,w,r+等等,意义如下:
1、"r" 以只读方式打开文件,文件不存在将打开失败
2、"w" 以只写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
3、"a" 以追加的方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件EOF标志将不动。
4、"r+" 以读/写方式打开文件,文件不存在将打开失败
5、"w+" 以读/写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
6、a+ 以追加方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件的EOF标志将会去掉,并在写好新的数据后自动加到文件末尾。
7、t 以文本模式打开
8、b 以二进制模式打开。
这些标志可以同时使用,比如rb+(就是br+)以二进制方式,只读打开文件。


2、读文件使用fread(),原型如下:

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

参数:

buffer是保存读取的数据,

size是每块的字节数;

n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中。
例:
  char buffer[1024];
  FILE *file = fopen(L"\\flash disk\\flyfox\\test.txt", "r");
  fread(buffer, 2, 150 , file);//按每块2个字节,读取1590块,共读取2*150=300个字节,实际读取块数可由函数返回。


3、写文件使用fwrite()。与fread对应,原型如下:

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

参数意义同fread。


4、fseek()
  此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型如下:

int fseek( FILE *stream, long offset, int origin );

如果成功返回0。

参数:

offset是移动的字符数,

origin是移动的基准,表示从哪开始移动文件指针,取值如下:

符号常量值基准位置SEEK_SET0文件开头SEEK_CUR1当前读写的位置SEEK_END2文件尾部

例:fseek(file, 1000L, SEEK_CUR); //把读写位置从当前位置向后移动1234字节
  fseek(file, 0L, 2);  //把读写位置移动到文件尾


5、关闭则是使用fclose,原型如下:

int fclose( FILE *stream );
对这种方法,也给出几行简单代码:

FILE *fp = _wfopen(pFileName, L"ab");if (!fseek (fp, 100, SEEK_SET)){    x = fwrite(buffer, 1, 1024, fp);    fflush (fp); }fclose (fp);

方法三 采用WinCE的API
1.  文件的打开CreateFile
以上参数比较多,这个在EVC下有帮助,可以查到。可以举个例子:
HANDLE hFile = CreateFile (pFileName,
                GENERIC_WRITE,
                FILE_SHARE_WRITE,
                NULL,
                OPEN_ALWAYS,
                FILE_ATTRIBUTE_NORMAL,
                NULL);


if (hFile == INVALID_HANDLE_VALUE)
{
        //打开失败
}


2.  文件的关闭
文件使用完之后就应该及时关闭,以释放对它的资源
BOOL CloseHandle(HANDLE hObject);
比如CloseHandle(hFile);


3.  文件的读写
文件的读ReadFile
文件的写WriteFile
比如:
bool b = WriteFile (hFile, pBuffer, dToWrite, pWrite, NULL);

             //dToWrite为准备写入的字节数,pWrite为DWORD*,获取实际写入的字节数
if ( !b )
{
       //写失败
}


4.  文件指针的移动SetFilePointer
例如:SetFilePointer(hFile, 0, NULL, FILE_BEGIN);


5.  获取和设置文件信息
参数表示文件名或者目录名
DWORD GetFileAtrribute(LPSTSTR lpFileName);
DWORD SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);


6.  获取和设置文件时间
BOOL GetFileTime
BOOL SetFileTime

7.  获取文件大小
DWORD GetFileSize(HANDLE hFile, NULL);