WinCE 下操作文件的几种方法

 

WinCE 下操作文件的几种方法

已有 5947 次阅读 2010-1-7 09:51

WinCE 下操作文件的几种方法
以下三种是我都使用过的,归纳如下:
方法一 使用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结构体
打开文件使用_wfopen,原型如下:
FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );
第二个参数是打开模式,这里有很多,比如r,w,r+等等,意义如下:
"r" 以只读方式打开文件,文件不存在将打开失败
"w" 以只写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
"a" 以追加的方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件EOF标志将不动。
"r+" 以读/写方式打开文件,文件不存在将打开失败
"w+" 以读/写方式打开文件,如无文件生成新文件,如果文件已存在,将被破坏
a+ 以追加方式打开文件,如果文件不存在,将自动创建一个新文件,已经存在的文件的EOF标志将会去掉,并在写好新的数据后自动加到文件末尾。
t 以文本模式打开
b 以二进制模式打开。
这些标志可以同时使用,比如rb+(就是br+)以二进制方式,只读打开文件。
读文件使用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个字节,实际读取块数可由函数返回。
写文件使用fwrite()。与fread对应,原型是size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );参数意义同fread。
fseek()
  此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是iint fseek( FILE *stream, long offset, int origin );如果成功返回0。参数offset是移动的字符数,origin是移动的基准,表示从哪开始移动文件指针,取值如下:
符号常量 值 基准位置
SEEK_SET 0 文件开头
SEEK_CUR 1 当前读写的位置
SEEK_END 2 文件尾部
例:fseek(file, 1000L, SEEK_CUR);//把读写位置从当前位置向后移动1234字节
  fseek(file, 0L, 2);//把读写位置移动到文件尾
关闭则是使用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);
具体参数请查阅MSDN。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值