MFC之文件的操作(CFileDialog,CFile)

时间:2022-03-07 20:20:59

CFileDialog()这个函数用来打开一个打开文件的对话框

直接CFileDialog fd (TRUE)就可以,并调用fd.DoModal()就能执行

如果要对文件类型做规定,那么就要去指定fd的第5个参数

参数类型 char m_cFileType[]="ALL FILES (*.*)|*.*||";

调用DoModal会返回一个int值

他表示你在创建的文件对话框后操作的值

当为IDOK时,就是选择文件点击打开时

为IDCANCEL就是点击了取消按键

为IDOK打开后

就可以通过fd的属性来获得文件的信息

fd.GetFileName()是得到具体文件名:a.txt

fd.GetFileTitle()得到文件名 a

d.GetFileExt()文件扩展名 txt

fd.GetPathName()得到文件名的具体路径:C:\A.TXT

通过这些基本的信息就可以对文件做进一步的操作了

 

接下来就是对文件的读写操作

读操作很简单

利用CFile类

CFile cf(fd.GetPathName,CFile::modeRead);

指定文件,并指定为只读

如果是传输文件,并不间断的传送需要每次读时要讲他的指针指定到位置

cf.Seek(1024,CFile::current);指针为当前位置。以1024为单位,每次读1024,下一次会从1024的位置向下继续读1024个位置

char buf[1024];

UINT m_uiCount=cf.Read(buf,1024);

将1024个字节放入buf中,并且返回真正的字节数

如果m_uiCount<1024时,说明已经到文件尾了

读完后记得要关闭

cf.close();

清空缓存 cf.flush()//在读时不知道有没有用

 

写文件:

先要去判断文件是否存在

有很多种方式,我选择了相对简单的方式,使用CFile::GetStatus()获取指定文件的状态去判断

CFileStatus   status;
 if (CFile::GetStatus("aa.txt",status))//存在返回TURE,不存在返回FALSE

文件存在并继续添加的话

CFile ccf("aa.txt",CFile::modeWrite);
  ccf.Seek(0,CFile::end);//将指针移动到文件尾

ccf.Write(buf,m_uiCount); //将读到的真正字节数和内容写入文件

然后去清空缓存并关闭

ccf.Flush();

ccf.Close();

 

如果文件并不存在,那么要先去创建文件

CFile ccf("aa.txt",CFile::modeCreate|CFile::modeWrite);

创建文件并具有写的功能