一、文件夹的创建
1 void CFileOperationDlg::OnButtonMakeFolder()
2 {
3 // TODO: Add your control notification handler code here
4 UpdateData(TRUE);
5 CFileFind m_sFileFind;
6
7 if (!m_sFileFind.FindFile(m_FolderName))
8 {
9 CreateDirectory(m_FolderName,NULL);
10 }
11 }
二、文件的创建
1 void CFileOperationDlg::OnButtonMakeFile()
2 {
3 // TODO: Add your control notification handler code here
4 UpdateData(TRUE);
5 CFile m_sFile;
6 m_sFile.Open(m_FolderName + TEXT("\\") + m_FileName,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::shareDenyWrite);
7 m_sFile.SeekToEnd();
8 m_sFile.Close();
9 }
三、文件夹的复制(包括文件的复制)
1 void CFileOperationDlg::OnButtonCopy()
2 {
3 // TODO: Add your control notification handler code here
4 UpdateData(TRUE);
5 CString m_strDestPath;
6 m_strDestPath = "D:\\TestMyself\\FileOperation\\Debug";
7 CString m_strSrcPath = "D:\\TestMyself\\FileOperation\\VISTA";
8 CopyDirectory(m_strSrcPath,m_strDestPath);
9 }
10
11 BOOL CFileOperationDlg::CopyDirectory(CString strSrcPath,CString strDestPath)
12 {
13 CFileFind m_sFileFind;
14 if (strSrcPath.IsEmpty())
15 {
16 OutputDebugString("源文件名为空,无法进行拷贝!");
17 return FALSE;
18 }
19 if (!m_sFileFind.FindFile(strDestPath))
20 {
21 CreateDirectory(strDestPath,NULL);//创建目标文件夹
22 }
23 CFileFind finder;
24 CString path;
25 path.Format("%s/*.*",strSrcPath);
26 //AfxMessageBox(path);
27 BOOL bWorking = finder.FindFile(path);
28 while (bWorking)
29 {
30 bWorking = finder.FindNextFile();
31 //AfxMessageBox(finder.GetFileName());
32 if (finder.IsDirectory() && !finder.IsDots())//是文件夹 而且 名称不含 . 或 ..
33 {
34 CopyDirectory(finder.GetFilePath(),strDestPath+"/"+finder.GetFileName());//递归创建文件夹+"/"+finder.GetFileName()
35 }
36 else
37 {//是文件,则直接复制
38 //AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
39 CopyFile(finder.GetFilePath(),strDestPath+"/"+finder.GetFileName(),FALSE);
40 }
41 }
42
43 return TRUE;
44 }
45
46 CString CFileOperationDlg::GetFilePath()
47 {
48 CString m_FilePath;
49
50 GetModuleFileName(NULL,m_FilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
51 m_FilePath.ReleaseBuffer();
52
53 int m_iPosIndex;
54 m_iPosIndex = m_FilePath.ReverseFind('\\');
55 m_FilePath = m_FilePath.Left(m_iPosIndex+1);
56
57 return m_FilePath;
58 }
59
60 CString CFileOperationDlg::GetFileName()
61 {
62 CString sFileName;
63
64 sFileName = CTime::GetCurrentTime().Format("%Y-%m-%d") + TEXT(".log");
65
66 return sFileName;
67 }
四、文件夹的删除
1 BOOL CFileOperationDlg::DeleteFolder(LPCTSTR lpszPath)
2 {
3 int nLength = strlen(lpszPath);
4 char *NewPath = new char[nLength + 2];
5 strcpy(NewPath,lpszPath);
6 NewPath[nLength] = '\0';
7 NewPath[nLength + 1] = '\0';
8 SHFILEOPSTRUCT FileOp;
9 ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
10 FileOp.fFlags = FOF_NOCONFIRMATION;
11 FileOp.hNameMappings = NULL;
12 FileOp.hwnd = NULL;
13 FileOp.lpszProgressTitle = NULL;
14 FileOp.pFrom = NewPath;
15 FileOp.pTo = NULL;
16 FileOp.wFunc = FO_DELETE;
17 return SHFileOperation(&FileOp) == 0;
18 }
五、文件夹的移动(剪切)
1 BOOL CFileOperationDlg::MoveFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
2 {
3 int nLengthFrm = strlen(lpszFromPath);
4 char *NewPathFrm = new char[nLengthFrm + 2];
5 strcpy(NewPathFrm,lpszFromPath);
6 NewPathFrm[nLengthFrm] = '\0';
7 NewPathFrm[nLengthFrm + 1] = '\0';
8 SHFILEOPSTRUCT FileOp;
9 ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
10 FileOp.fFlags = FOF_NOCONFIRMATION ;
11 FileOp.hNameMappings = NULL;
12 FileOp.hwnd = NULL;
13 FileOp.lpszProgressTitle = NULL;
14 FileOp.pFrom = NewPathFrm;
15 FileOp.pTo = lpszToPath;
16 FileOp.wFunc = FO_MOVE;
17
18 return SHFileOperation(&FileOp) == 0;
19 }245
六、文件写操作
1 void CFileOperationDlg::OnButtonOk()
2 {
3 // TODO: Add your control notification handler code here
4 UpdateData(TRUE);
5 try
6 {
7 CFile m_sFile;
8 CFileFind m_FileFind;
9 CString m_sErrorMessage;
10 //CString m_sFileName = GetFileName();
11 //CString m_sFilePath = GetFilePath();
12 CString m_sCurrentTime = (CTime::GetCurrentTime()).Format("%Y-%m-%d %X");
13
14 if (!m_FileFind.FindFile(m_FolderName))
15 {
16 CreateDirectory(m_FolderName,NULL);
17 }
18 m_sFile.Open(m_FolderName + TEXT("\\") +m_FileName,CFile::modeCreate |CFile::modeNoTruncate| CFile::modeReadWrite |CFile::shareDenyWrite);
19
20 m_sFile.SeekToEnd();
21
22 if (sizeof(TCHAR) == sizeof(WCHAR))
23 {
24 WORD wSignature = 0xFFFF;
25 m_sFile.Write(&wSignature,2);
26 }
27
28 m_sErrorMessage = TEXT("*******************") + m_sCurrentTime + TEXT("*******************")+TEXT("\r\n") ;
29 m_sFile.Write(m_sErrorMessage,m_sErrorMessage.GetLength()*sizeof(TCHAR));
30
31 m_RichText += TEXT("\r\n");\
32 m_sFile.Write(m_RichText,m_RichText.GetLength()*sizeof(TCHAR));
33 m_sFile.Close();
34 }
35 catch(CFileException fileException)
36 {
37 return ;
38 }
39
40 }
七、判断文件是否存在
CString Path;
BOOL rec = PathFileExists(Path);
if(rec)
{
//存在
}else{
// 不存在
}
八.文件的移动API
BOOL MoveFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName );
这个函数可以移一个文件,或目录(包括子目录),例,
MoveFile(_T("d://softist.txt"), _T("d://softist2.txt"));
下面的API带着选项dwFlags ,移动文件,或目录(包括子目录)。
BOOL MoveFileEx( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );
dwFlags的意义:
MOVEFILE_REPLACE_EXISTING 如果目标文件存在是否替代它 。
MOVEFILE_DELAY_UNTIL_REBOOT 文件移动准备,下次启动系统时执行移动作业