zoukankan      html  css  js  c++  java
  • MFC文件操作

      文件的操作分为两步,打开和读写。

      打开和读写对应着两个类,分别 CFileDialog 和 CFile.

     

    第一步  打开文件对话框操作:

      (1) 文件对话框类    CFileDialog  

      

      (2) 构造方法      CFileDialog::CFileDialog();

      CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,

                  DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

                  LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

      参数介绍:

        bOpenFileDialog    为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。

        lpszDefExt       指定默认的文件扩展名。 如"jpg"。
        lpszFileName      指定默认的文件名。 如"*.jpg"。

        dwFlags         指明一些特定风格。如:dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT。

                    OFN_HIDEREADONLY       隐藏只读复选框。

                    OFN_OVERWRITEPROMPT    如果选择的文件已经存在,使用另存为对话框产生一个消息框;

                                     用户必须确认是否复盖这个文件。

        lpszFilter        是很重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:

                    "jpg Files (*.jpg)|*.jpg|bin Files (*.bin)|*.bin|All Files (*.*)|*.*||";

                    文件类型说明和扩展名间用 | 分隔,每种文件类型间用 | 分隔,末尾用 || 指明。

        pParentWnd       为父窗口指针,一般为空。

      (3) 打开对话框方法    CFileDialog::DoModal(); 用来打开对话框。

      (4) 取得完整文件名方法  CFileDialog::GetPathName();

                   得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt。

      

    构造和打开对话框用例: 

      char szFilters[]="jpg Files (*.jpg)|*.jpg|bin Files (*.bin)|*.bin|All Files (*.*)|*.*||";
      CFileDialog fileDlg(TRUE, "jpg", "*.jpg",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilters, NULL);

      if( fileDlg.DoModal ()==IDOK )                      //此时,才真正弹出对话框。
      {
        gReadFilePathName = fileDlg.GetPathName();            //得到完整的文件名、目录和扩展名。
        GetDlgItem(IDC_EDIT1)->SetWindowText(gReadFilePathName);  //将文件名、目录和扩展名写回窗口。  
      }

    第二步  读写文件操作:    

      (1) 文件类        CFile

      (2) 构造方法       CFile::CFile();

      CFile::CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); 

      lpszFileName      文件名

      nOpenFlags        打开方式,有:

                  CFile::modeCreate:以新建方式打开,如果文件不存在,新建;

                             如果文件已存在,把该文件长度置零,即清除文件原有内容。

                  CFile::modeRead:只读。
                  CFile::modeWrite:只写。
                  CFile::modeReadWrite:以读写方式打开文件。

                  CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。

                                一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。

      用例如下:

        CFile ReadFile(gReadFilePathName,CFile::modeRead);

        CFile SaveFile(gSaveFilePathName,CFile::modeCreate|CFile::modeWrite);

      (3) 只读方法      CFile::Read();

      CFile::Read( void* lpBuf, UINT nCount );   从lpBuf指向的地址开始读取nCount 个字节,指针也自动下移nCount .

      lpBuf          文件指针

      nCount          字节数

      用例如下:

        unsigned char temp;

        ReadFile.Read(&temp,1);

      (4) 只写方法      CFile::Write();

      CFile::Write( const void* lpBuf, UINT nCount );   向lpBuf指向的内存地址写入nCount 个字节,指针也自动下移nCount .

      lpBuf          文件指针

      nCount          字节数

      用例如下:

         char ChangRun[2] = {'\r','\n'};

        SaveFile.Write(ChangRun,2);

      (5) 定位方法      CFile::Seek();

      CFile::Seek( LONG lOff, UINT nFrom );    从指定位nFrom置偏移lOff字节.

      nFrom          有三种方式,如:

                   CFile::begin     从文件开始移动

                   CFile::current    从当前位置移动

                   CFile::end        从文件末位移动,此时lOff为负值.

      用例如下:

        SaveFile.Seek(2,CFile::current);


     完。


       

  • 相关阅读:
    CRM 客户线索 与 销售人员
    CRM X
    MySQL为Null导致的5大坑
    搞懂 macOS 上的主机名/hostname/ComputerName
    Node服务中如何写日志?
    Linux下 iptables 超详细教程和使用示例
    精读《Prisma 的使用》
    Redis夺命20问
    redis HyperLogLog的使用
    聊聊redis分布式锁的8大坑
  • 原文地址:https://www.cnblogs.com/xiehy/p/1708454.html
Copyright © 2011-2022 走看看