• 文件操作总结


    c语言判断 文件是否存在

     PathFileExists()为TRUE 存在,否则不存在

    获取运行程序路径 char path[MAX_PATH]; GetModuleFileName(NULL, path, MAX_PATH); //获取到完整路径如:E:/Tools/qq.exe PathRemoveFileSpec( path );//获取到的是程序所在文件夹如:E:/Tools CString strPathname ; strPathname.Format("%s\",path); return strPathname

    //获取运行程序路径 
    char path[MAX_PATH]; GetModuleFileName(NULL, path, MAX_PATH); //获取到完整路径如:E:/Tools/qq.exe
     PathRemoveFileSpec( path );//获取到的是程序所在文件夹如:E:/Tools
     CString strPathname ; strPathname.Format("%s\",path);//得到的是E:Tools
     return strPathname 
    获取已知文件的路径位置;
     CString strpath; //绝对路径是已知的;
     int i = strpath.ReverseFind( '\');
     CString strpathname = strpath.Left( i + 1);
    
    
    已知文件的路径,获取文件名;
    
    CString strpath;//绝对路径是已知的
    int i = strpath.ReverseFind( '\'); 
    CString strpathname = strpath.Mid( i + 1 , strpath.Getlength());

    读取和保存CString 类型的文件

    1.保存文件 CFileDialog filedlg( FALSE );  filedlg.m_ofn.lpstrFilter="cfg(*.cfg)*.cfg"; 

    fileDlg.m_ofn.lpstrFilter = "All Support Files*.bmp;*.jpg;*.gif;*.png;BMP Files(.bmp)*.bmpJPEG Files(.jpeg)*.jpgGIF Files(.gif)*.gifPNG Files(.png)*.png";

     filedlg.m_ofn.lpstrDefExt = "cfg";  CString StrInfo;  if(IDOK==filedlg.DoModal())  {   GetDlgItemText( IDC_EDIT_CONTENTS ,StrInfo );    save( filedlg.GetFileName() , StrInfo ) ;//把文件名和要保存的内容传给函数save操作; }

    BOOL CScreenDefineView::save( CString strFileName , CString &StrInfo ) {  BOOL bret = FALSE ;  CStdioFile mFile;  if (mFile.Open( strFileName ,  CFile::modeWrite |CFile::modeCreate |CFile::modeNoTruncate ) )//主要打开文件,  {   mFile.WriteString( StrInfo );写入文件;   mFile.Close() ;   bret = TRUE;  }

     return bret; }

    2.加载文件 CFileDialog filedlg( TRUE );  filedlg.m_ofn.lpstrFilter="cfg(*.cfg)*.cfg";   filedlg.m_ofn.lpstrDefExt = "cfg";

     if(IDOK==filedlg.DoModal())  {    CString strinfo;   if( Load( filedlg.GetPathName(), strinfo ) ) }

    BOOL CScreenDefineView::Load( CString pFilename ,CString &strinfo ) {

     BOOL bret = FALSE;  int nLenDate = 0;  CStdioFile file;  if(file.Open( pFilename , CFile::modeRead |CFile::typeBinary ))//打开*.TXT这个文件,打开形式为读取   {   if( file.GetLength() > 0)   {     CString strtemp;    while ( file.ReadString( strtemp ) )    {       strinfo +=  strtemp + " ";    }        bret = TRUE;   }   file.Close();  }

     return bret; }

    初始化设置文件 .ini的读取加载操作 .ini文件里面内容格式为 [Setion]//段名,可以用多个段名 nvalue=12//nvalue为变量名,12为变量值 szname=小明//szname为变量名,小明为变量值; 1.读取: 加入文件里面的存的是CString 等字符串类型的话: UINT  nLen; char szBuf[1024]; memset(szBuf, 0x00, sizeof(szBuf)); nLen = GetPrivateProfileString(lpszSection, lpszEntry, lpszDefault, szBuf, sizeof(szBuf)/sizeof(TCHAR), m_szFileName); //     GetPrivateProfileString("Section", "Key", NULL, sdata, sizeof(sdata),"MyIniFile.ini");第三个参数是如果读取失败,就给sdata赋值lpszDefault, return szBuf;

    假如文件里面存的是数字类型的话:如int,flaot 、二进制等型 int nValue = GetPrivateProfileInt(lpszSection, lpszEntry, nDefault, m_szFileName); //(lpszSection是段名,lpszEntry是变量名,nDefault是如果取得的值失败的话,就返回nDefault给返回值,m_szFileName位文件名;

    存储 BOOL bret = WritePrivateProfileString(lpszSection, lpszEntry, lpszValue, m_szFileName); BOOL bret = WritePrivateProfileString(lpszSection, lpszEntry, strText.GetBuffer(), m_szFileName); int nValue = GetPrivateProfileInt(lpszSection, lpszEntry, nDefault, m_szFileName);//如果变量名找不到,就把nDefault赋值给返回值;

    CFile file 保存内容和读取内容;CFile保存时要取得保存内容的大小,才能保存; 1CFile file保存 CFile file; if( file.Open( strDataPath, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary ) )//strDataPath为文件名;   {  int nLen;   nLen = m_progData.SaveDataToBuffer( NULL );这里是取得内容大小   if( nLen > 0 )   {    byte *pData = new byte[ nLen ];    if( pData )    {     bRet = ( m_progData.SaveDataToBuffer( pData ) == nLen );

        file.Write( pData, nLen );这里是把大小为nLen的pData保存到文件strDataPath中;     delete []pData;     pData = NULL;    }   }   file.Close();  }

     if( bRet )  {   m_strDataPath = strDataPath;  }  return bRet; }

    2.CFile file读取

    假如是用char *buf 来读取文件的话,要多出一个字节来截短字符串;buf = new char[nLen +1], 读取后就用 buf[nLen]=0 ,注意,下标是nLen ,不是nLen+1,因为下标是从0开始的;

    BOOL CProgData::Load( const CString &strDataPath ) {  BOOL bRet = FALSE;  CWaitCursor waitCurser;  CFile file;  if( file.Open( strDataPath, CFile::modeRead | CFile::typeBinary ) )  {   if( file.GetLength() > 0 )   {    byte *pData = new byte[ file.GetLength() ];    if( pData )    {     if( file.GetLength() == file.Read( pData, file.GetLength() ) )     {      bRet = m_progData.LoadDataFromBuffer( pData, file.GetLength() );     }     delete []pData;     pData = NULL;    }   }   file.Close();  }

     if( bRet )  {   m_strDataPath = strDataPath;  }  return bRet; }

    FILE *fp 读取与保存;FILE 进行读写有个好粗就是可以在原有内容末尾追加内容; FILE *fp; 1.写入; if(fopen(pathname,"a")); char *buf; buf = new buf[1024]; //通过数把要保存的数据赋值给buf,并且保存的数据长度为nLen; fwrite( buf ,nlen,1,fp);//这里表示每次存入长度为nLen,写入1次 fclose(fp)

    2.读取 fread(buf,nlen,1,fp); fclose(fp)

    r 以只读方式打开文件,该文件必须存在。  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)   r+ 以可读写方式打开文件,该文件必须存在,并且在写文件时,从文件开头的字符开始依次覆盖文件的内容,如果要写入的字符的长度小于原文件中的长度,则原后面的内容不变(字符

    串结尾符‘’不写入文件中)。  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)   (下同)    rb+ 读写打开一个二进制文件,允许读数据。   rw+ 读写打开一个文本文件,允许读和写。//这种模式打开会报错,不建议使用   wb 只写打开或新建一个二进制文件;只允许写数据。   wb+ 读写打开或建立一个二进制文件,允许读和写。   wt+ 读写打开或着建立一个文本文件;允许读写。   at+ 读写打开一个文本文件,允许读或在文本末追加数据。   ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。   上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制

    1.判断文件是否存在

    利用CFile类和CFileStatus类判断

    CFileStatus filestatus;
    if (CFile::GetStatus(_T("d:\softist.txt"), filestatus))
        AfxMessageBox(_T("文件存在"));
    else
        AfxMessageBox(_T("文件不存在"));

    利用CFileFind类判断

    CFileFind filefind;
    CString strPathname = _T("d:\softist.txt");
    if(filefind.FindFile(strPathname))
        AfxMessageBox(_T("文件存在"));
    else
        AfxMessageBox(_T("文件不存在"));

    利用API函数FindFirstFile判断,这个函数还可以判断文件属性,日期,大小等属性。例:

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile(_T("d:\softist.txt"), &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE) 
    {
        AfxMessageBox(_T("文件不存在"));
    } 
    else 
    {
        AfxMessageBox(_T("文件存在"));
        FindClose(hFind);
    }

    2.文件日期操作。下面是取得"d:\softist.txt"的文件修改时间,TRACE以后,再把文件修改时间改成 2000-12-03 12:34:56

    HANDLE     hFile;
    FILETIME   filetime;
    FILETIME   localtime;
    SYSTEMTIME systemtime;
    
    hFile = CreateFile(_T("d:\softist.txt"), GENERIC_READ | GENERIC_WRITE,
    					0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    if (hFile != INVALID_HANDLE_VALUE) 
    {
        GetFileTime(hFile, NULL, NULL, &filetime);      //取得UTC文件时间
        FileTimeToLocalFileTime(&filetime, &localtime); //换成本地时间
        FileTimeToSystemTime(&localtime, &systemtime);  //换成系统时间格式
    
        TRACE("%04d-%02d-%02d %02d:%02d:%02d
    ",
              systemtime.wYear, systemtime.wMonth, systemtime.wDay,
              systemtime.wHour, systemtime.wMinute, systemtime.wSecond);
    
        //把文件时间修改成 2000-12-03 12:34:56
        systemtime.wYear = 2000; systemtime.wMonth = 12; systemtime.wDay = 3;
        systemtime.wHour = 12; systemtime.wMinute = 34; systemtime.wSecond = 56;
        SystemTimeToFileTime(&systemtime, &localtime);	//换成文件时间格式
        LocalFileTimeToFileTime(&localtime, &filetime);	//换成UTC时间
        SetFileTime(hFile, NULL, NULL, &filetime);		//设定UTC文件时间
        CloseHandle(hFile);
    }

    3.设置文件属性

    BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );

    dwFileAttributes 的意义
    FILE_ATTRIBUTE_ARCHIVE   保存文件

    FILE_ATTRIBUTE_HIDDEN    隐藏文件
    FILE_ATTRIBUTE_NORMAL   通常文件
    FILE_ATTRIBUTE_READONLY 只读文件
    FILE_ATTRIBUTE_SYSTEM   系统文件

    例:

    SetFileAttributes(_T("d:\softist.txt", FILE_ATTRIBUTE_READONLY);

    复制代码
  • 相关阅读:
    [转]ASP.NET 2.0 数据绑定表达式语法
    为什么不直接使用成员变量而使用属性呢?
    WebForm中的容器
    winform下简单多线程例子
    Window.ShowModalDialog使用手册
    weblog? weblogPost?
    浅析Page.LoadTemplate("模板")方法动态获取绑定模板后,通过FindControl获取服务端控件的方法。
    在sql中快速导入、导出Excel
    游标
    sql判断文件是否存在
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3162360.html
Copyright © 2020-2023  润新知