VC文件操作总结

1.读写文件

  CString strPath=“c://test.txt”;//文件路径
  CFile File;
  if (File.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))//写文件
  {
   //do something ...
   File.Close();
  }

  CString strPath=“c://test.txt”;
  CFile File;
  if (File.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeRead))//读文件
  {
   //do something ...
   File.Close();
  }

  CString strPath=“c://test.txt”;
  CFile File;
  if (File.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite))//读写文件
  {
   //do something ...
   File.Close();
  }

2.重命名文件

//strOldPath,strNewPath分别代表旧的文件和新的文件的绝对路径

BOOL renameFile(CString strOldPath,CString strNewPath)

{
  try
   CFile::Rename(strOldPath, strNewPath);
  catch(CFileException* pEx )
  {
#ifdef _DEBUG
   afxDump << "文件" << strOldPath << "未发现"<<"/n";
#endif
   pEx->Delete();

   return FALSE;
  }

return TRUE;

}

3.重命名文件夹/文件

BOOL   MoveFile(
    LPCTSTR   lpExistingFileName,         // 旧文件夹名称
    LPCTSTR   lpNewFileName               // 新文件夹名称

);
或者

BOOL MoveFileEx (
LPCTSTR lpExistingFileName,              //旧文件夹名称

LPCTSTR lpNewFileName,                   //新文件夹名称

 DWORD dwFlags

);
或者如下函数

BOOL ReNameFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{
 int nLengthFrm = strlen(lpszFromPath);
 char *NewPathFrm = new char[nLengthFrm+2];
 strcpy(NewPathFrm,lpszFromPath);
 NewPathFrm[nLengthFrm] = '/0';
 NewPathFrm[nLengthFrm+1] = '/0';

 SHFILEOPSTRUCT FileOp;
 ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
 FileOp.fFlags = FOF_NOCONFIRMATION ;
 FileOp.hNameMappings = NULL;
 FileOp.hwnd = NULL;
 FileOp.lpszProgressTitle = NULL;
 FileOp.pFrom = NewPathFrm;
 FileOp.pTo = lpszToPath;
 FileOp.wFunc = FO_RENAME;
 if (SHFileOperation(&FileOp) == 0)
 {
  delete NewPathFrm;
  return  TRUE;
 }
 else
 {
  delete NewPathFrm;
  return  FALSE;
 }

}

4.查找目录是否存在

//strPath表示要查找的目录路径

BOOL FolderExist(CString strPath)
{
 WIN32_FIND_DATA   wfd;
 BOOL rValue = FALSE;
 HANDLE hFind = FindFirstFile(strPath, &wfd);
 if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  rValue = TRUE;  
 FindClose(hFind);
 return rValue;
}

5.创建目录

BOOL CreateDirectory(
  LPCTSTR lpPathName,                                       //创建的目录路径
  LPSECURITY_ATTRIBUTES lpSecurityAttributes  //创建的目录安全属性
);

返回值:

成功返回非0,失败返回0。

调用GetLastError获得额外的信息.

Return code Description
ERROR_ALREADY_EXISTS 指定的目录已经存在.
ERROR_PATH_NOT_FOUND 如果中间有目录不存在将出错。想直接创建所有路径目录用 SHCreateDirectoryEx 函数.

6.删除目录

方法1:递归调用

//删除文件夹目录(非空)
BOOL DeleteDirectory(char* sDirName)
{
 CFileFind tempFind;
 char sTempFileFind[MAX_PATH] ;

 sprintf(sTempFileFind,"%s//*.*",sDirName);
 BOOL IsFinded = tempFind.FindFile(sTempFileFind);
 while (IsFinded)
 {
  IsFinded = tempFind.FindNextFile();
  if (!tempFind.IsDots())
  {
   char sFoundFileName[MAX_PATH];
   strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));

   if (tempFind.IsDirectory())
   {
    char sTempDir[MAX_PATH];
    sprintf(sTempDir,"%s//%s",sDirName,sFoundFileName);
    DeleteDirectory(sTempDir);
   }
   else
   {
    char sTempFileName[MAX_PATH];
    sprintf(sTempFileName,"%s//%s",sDirName,sFoundFileName);
    DeleteFile(sTempFileName);
   }
  }
 }
 tempFind.Close();
 if(!RemoveDirectory(sDirName))
  return FALSE;

 return TRUE;
}
方法2:shell API

BOOL DelDirectory(LPCTSTR lpszPath)

{

    SHFILEOPSTRUCT FileOp;

    FileOp.fFlags = FOF_NOCONFIRMATION;

    FileOp.hNameMappings = NULL;

    FileOp.hwnd = NULL;

    FileOp.lpszProgressTitle = NULL;

    FileOp.pFrom = lpszPath;

    FileOp.pTo = NULL;

    FileOp.wFunc = FO_DELETE;

    return SHFileOperation(&FileOp) == 0;

}

你可能感兴趣的:(shell,File,null,delete,Path,attributes)