CFile类/CreateFile 文件操作

1 CFile类

①构造函数

CFile (

LPCTSTR  lpszFileName,  //文件名(可以包含路径)

UINT  nOpenFlags  //打开标志

);    

eg.

CFile  file("6.txt",  CFile::modeCreate | CFile::modeWrite);   //创建写文件,如果文件存在长度清零。


②CFile::Write 

virtual  void   Write(constvoid*  lpBuf,     //要写的缓冲区指针

UINT  nCount //要写入的字节数, NOTE:nCount单位为字节数,而不是字符个数!

);
throw(CFileException);

eg.

CFile file("7.txt", CFile::modeCreate | CFile::modeWrite);

int arr[] = {49, 50 , 51, 52};  //写数字1 2 3 4 要写ASCII码

file.Write(arr, sizeof(arr));  //sizeof(arr)为要写的字节数

file.Close();

 

③CFile::GetLength 

virtual   DWORD  GetLength()  const;
throw(CFileException);

功能:取得文件长度,单位字节数,而非字符个数。

eg.

int len = file.GetLength();  //返回file对象所关联的文件字节数

 

④CFile::Read

virtual   UINTRead(

void* lpBuf,  //把读入的内容写到lpBuf所指的内存区域 

UINT   nCount//读入nCount字节内容到lpBuf所指内存区域

);
throw(CFileException);

eg.

char ch[100];

memset(ch, '\0', 100);

//memset(ch, '\0', sizeof(ch));    同上句, memset()是对字节操作,因此如果对字符以外的内存区域赋值,要注意区别!

file.Read(ch, file.GetLength());

 

⑤Example of Writing file

CFile file("7.txt", CFile::modeCreate | CFile::modeWrite);

int arr[] = {49, 50 , 51, 52};

file.Write(arr, sizeof(arr));

file.Close();

 

⑥Example of Reading file

CFile file("7.txt", CFile::modeRead);

int *arr = NULL;

int  len = 0;

len = file.GetLength();  //返回file字节数

int  arrLength = 0;

arrLength = len / sizeof(int);   //数组元素个数

arr = new  int[arrLength];

file.Read(arr,  len);

 

2 WIN32 API 文件读写

①CreateFile

HANDLE CreateFile(
 LPCTSTR  lpFileName,    //指向文件名的指针
 DWORD  dwDesiredAccess,    //访问模式(写/读)
 DWORD  dwShareMode,    //共享模式
 LPSECURITY_ATTRIBUTES  lpSecurityAttributes, //指向安全属性的指针
 DWORD  dwCreationDisposition,   //如何创建
 DWORD  dwFlagsAndAttributes,   //文件属性
 HANDLE  hTemplateFile    //用于复制文件句柄
);

【dwDesiredAccess】

Long,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息

【dwShareMode】

如果为0表示不共享,并且该函数成功执行,在该函数返回的句柄被close之前文件对象不能再被打开或共享;如果为FILE_SHARE_DELETE表示在删除访问的时候可以共享;如果为FILE_SHARE_READ / FILE_SHARE_WRITE表示可以读/写共享。

【lpSecurityAttributes】

指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)

【dwCreationDisposition】

CREATE_NEW创建文件;如文件存在则会出错CREATE_ALWAYS创建文件,会改写前一个文件OPEN_EXISTING文件必须已经存在。由设备提出要求OPEN_ALWAYS如文件不存在则创建它TRUNCATE_EXISTING讲现有文件缩短为零长度

【dwFlagsAndAttributes】

FILE_ATTRIBUTE_ARCHIVE标记归档属性FILE_ATTRIBUTE_COMPRESSED将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式FILE_ATTRIBUTE_NORMAL默认属性FILE_ATTRIBUTE_HIDDEN隐藏文件或目录FILE_ATTRIBUTE_READONLY文件为只读FILE_ATTRIBUTE_SYSTEM文件为系统文件FILE_FLAG_WRITE_THROUGH操作系统不得推迟对文件的写操作FILE_FLAG_OVERLAPPED允许对文件进行重叠操作FILE_FLAG_NO_BUFFERING禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块FILE_FLAG_RANDOM_ACCESS针对随机访问对文件缓冲进行优化FILE_FLAG_SEQUENTIAL_SCAN针对连续访问对文件缓冲进行优化FILE_FLAG_DELETE_ON_CLOSE关闭了上一次打开的句柄后,将文件删除。特别适合临时文件

 

【hTemplateFile】

如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性,一般为NULL。


②WriteFile

BOOL WriteFile(

HANDLE  hFile, // 文件句柄LPCVOID  lpBuffer, // 数据缓存区指针DWORD  nNumberOfBytesToWrite, // 你要写的字节数LPDWORD  lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针LPOVERLAPPED  lpOverlapped // OVERLAPPED结构体指针 );

 

③CloseHandle

BOOL CloseHandle(

HANDLE  hObject // handle to object 

);

功能:关闭一个已经打开了个对象


④ReadFile

ReadFile(

HANDLE hFile, //文件的句柄

LPVOID lpBuffer, //用于保存读入数据的一个缓冲区DWORD nNumberOfBytesToRead, //要读入的字节符数LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针

LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL

);


⑤Example of Writing file

void CMy59View::OnFileWrite() 

{

    HANDLE hFile;

    hFile = CreateFile("8.txt", FILE_GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    DWORD length = 0;

    int arr[] = {49, 50 , 51, 52};

    if ( hFile != INVALID_HANDLE_VALUE)

    {

        WriteFile(hFile, arr, sizeof(arr), &length, NULL);

    }

    else

    {

        MessageBox(_T("文件打开错误"));

    }

    CloseHandle(hFile);

}

⑥Example of Reading file

void CMy59View::OnFileRead() 

{

    HANDLE hFile;

    hFile = CreateFile("9.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if( hFile != INVALID_HANDLE_VALUE)

    {

        int num[5];

        DWORD length = 0;

        ReadFile(hFile, num, sizeof(num), &length, NULL);

    }

    else

    {

        MessageBox(_T("文件打开错误!"));

    }

    CloseHandle(hFile);

}

 

NOTE:串口为独占设备,当用CreateFile打开串口时共享参数一定为0(即不共享),dwCreationDisposition必须为OPEN_EXISTING。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值