MFC下对文件及文件夹的操作(复制、剪切、删除、创建文件夹,写文件)

一、文件夹的创建

 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 }

六、文件写操作

 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 }

以上代码测试通过!!

时间: 2024-10-14 11:12:49

MFC下对文件及文件夹的操作(复制、剪切、删除、创建文件夹,写文件)的相关文章

目的文件已不在原目录,程序还会继续执行写文件操作吗?

最近,在现场调试程序的同事反馈回了一个问题:目的文件已不在原目录,程序还会继续执行写文件操作.我们了解了一下,具体的情况是这样的:某软件(运行在Linux下)有一个功能是在配置好的某个目录中生成文件,在文件生成的过程中,现场同事将已经生成的文件移动到了另外一个目录中:过了一段时间后发现,程序继续向移动之后的文件中写入内容,导致该文件不断增大. 为了还原现场问题,我们编写了以下程序: /********************************************************

linux批量复制或删除同命名规则的文件

如图所示,有多个不同后缀的文件,但他们的前缀都是"QC_TZ.impute." 此时想批量复制图中的文件的话,可以考虑用命令行 cp QC_TZ.impute.* /your/destination/ 其中,cp表示复制,*表示不同的后缀,/your/destination/表示复制的文件存放在"destination"的文件夹下 同理,如果想批量删除的话,用以下命令行 rm QC_TZ.impute.* rm表示删除

读取一个文件的数据经过某种操作,将结果存储到另外一个文件

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 FILE *fp_read, *fp_write; 7 int i,j,k,l; 8 float avg; 9 fopen_s(&fp_read,"E:\\score.txt","r"); 10 fopen_s(&fp_write,"E:\\average.txt","w&q

按创建日期删除指定日期之前的文件夹及文件夹下的所有子目录

转载void CTestDlg::DeleteDirectory(CString strDir) { if(strDir.IsEmpty()) return; //首先删除文件及子文件夹 CFileFind ff; BOOL bFound = ff.FindFile(strDir+"\\*", 0); while(bFound) { bFound = ff.FindNextFile(); CString filename = ff.GetFileName(); if(filename=

无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)

简介 本文介绍您可能无法删除 NTFS 文件系统卷上的文件或文件夹的原因,以及如何分析造成此问题的不同原因从而解决此问题. 更多信息 注意:在内部,NTFS 将文件夹作为特殊类型的文件进行处理.因此,本文中的“文件”一词可能指文件,也可能指文件夹. 原因 1:文件使用了 ACL 如果某个文件使用了访问控制列表 (ACL),您可能无法删除该文件.要解决此问题,请更改该文件上的权限.您可能需要拥有这些文件的所有权才能更改权限. 管理员具有取得任何文件所有权的隐含能力,即使未明确向他们授予针对此文件的

linux中文件和文件夹的操作

一.文件操作 1.创建( > touch ) > 2.txt 在当前路径创建文件2.txt,(如果2.txt本来就存在,2.txt的内容会被清除) touch 3.log 在当前路径创建文件3.log 2.删除( rm ) rm: -i 删除前逐一询问确认. -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认. -r 将目录及以下之档案亦逐一删除.需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的 rm  2.txt 删除当前路径中的文件2.txt,需确认. r

MFC下MCI的使用播放音乐

最近研究了一下MFC下的音乐的播放,主要使用了MCI 1.需要包含的库文件 在链接资源里(link)添加库文件VFW32.lib winmm.lib 2.包含的头文件 1 #include <mmsystem.h> 2 3 #include "stdafx.h" 4 5 #include "vfw.h" 6 7 #include <digitalv.h> 8 9 #pragma comment(lib,"winmm.lib"

如何在linux系统下对文件夹名有空格的文件夹进行操作

http://www.2cto.com/os/201409/335119.html 在Windows操作系统中可以轻易地创建\移动\删除文件夹名带有空格的文件夹, 而在linux则需要进行一些特殊的处理才能实现以上功能. (1)创建文件夹 mkdir my\ first 这条命令创建了文件夹"my first",文件夹名中my和first之间有一个空格,在命令行中需要 添加一个"\"符号和一个空格的组合 mkdir my\ \ tow 这条命令创建了文件夹"

获取列表中某一个文件夹下的列表项集合(不包含子文件夹对象,也不包含子文件夹中的列表项)

RT,方法如下: 1 SPListItemCollection GetSubItemsWithoutFoldersInParrentFolder(SPFolder parrent) 2 { 3 SPList list = parrent.Item.ParentList; 4 SPQuery query = new SPQuery(); 5 query.Folder = parrent; 6 query.Query = "<Where><Eq><FieldRef Na