天天看点

vc++基础班[22]---文件的基本操作2

MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API;

SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()

①、文件的复制:CopyFile

若要复制文件夹,可以在目标位置新建一文件夹,然后将源文件夹里面的文件进行遍历,一个一个的复制到目标文件夹内即可!

②、文件的重命名或移动 [适用于文件夹]:

static CFile::Rename 重命名文件;

MoveFile,※※※注意:该函数不仅可以移动文件,还可以移动目录,包括目录中的文件和子目录,但是目录的移动只能限制在一个驱动器;

即:同一驱动器内为重命名操作,不同驱动器内为移动操作;

③、文件的删除:CFile::Remove 或 DeleteFile

如果文件有只读属性怎么办?普通的方法还能删除成功吗?

④、文件属性信息的获取:CFile::GetStatus

看看其内部 SDK API 的实现;

⑤、文件属性信息的设置:CFile::SetStatus

看看其内部 SDK API 实现;

这回可以成功的将只读属性的文件删除了……方法就是去除文件的只读属性后再进行删除操作;

BOOL DelReadOnlyFile(LPCTSTR lpszPath)

{

 DWORD dwRet = GetFileAttributes(lpszPath);

 if (dwRet == INVALID_FILE_ATTRIBUTES) return FALSE;

 if (dwRet & FILE_ATTRIBUTE_READONLY){

  dwRet &= ~FILE_ATTRIBUTE_READONLY;

  SetFileAttributes(lpszPath, dwRet);

 }

 return DeleteFile(lpszPath);

}

⑥、判断文件是否存在:方法也有很多种:

1>、_access 函数;

2>、CreateFile 函数;

3>、FindFirstFile 函数;

4>、GetFileAttributes 函数;

5>、PathFileExists(是 Shell Lightweight Utility APIs 函数:Header: Declared in Shlwapi.h Import Library: Shlwapi.lib)

这里面给大家使用 GetFileAttributes 函数进行讲解:

BOOL TargetIsExist(LPCTSTR lpszPath)

{

 BOOL bRet = TRUE;

 DWORD dwRet = GetFileAttributes(lpszPath);

 if (dwRet == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND){

  bRet = FALSE;

 }

 return bRet;

}

⑦、判断给定路径是文件还是目录:

1>、GetFileAttributes 函数;

2>、PathIsDirectory(是 Shell Lightweight Utility APIs 函数:Header: Declared in Shlwapi.h Import Library: Shlwapi.lib)

3>、……

这里面给大家使用 GetFileAttributes 函数进行讲解:

int TargetIsDirectory(LPCTSTR lpszPath)

{

 int iRet = -1;

 DWORD dwRet = GetFileAttributes(lpszPath);

 if (dwRet == INVALID_FILE_ATTRIBUTES){

  iRet = -1;

 }else if (dwRet & FILE_ATTRIBUTE_DIRECTORY){

  iRet = 1;

 }else{

  iRet = 0;

 }

 return iRet;

}