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/r/n",

         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);

文件的复制,移动,删除,更名

1.文件的复制API

BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);

bFailIfExists用来制定如果目标文件已经存在时,是否中止复制操作,返回FALSE。例,把"d://softist1.txt"复制到"d://softist2.txt",即使"d://softist2.txt"已经存在。

BOOL bRet = CopyFile(_T("d://softist1.txt"), _T("d://softist2.txt"), FALSE);

2.文件的移动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 文件移动准备,下次启动系统时执行移动作业。

3.删除文件

API:

BOOL DeleteFile( LPCTSTR lpFileName );

MFC:

static void PASCAL CFile::Remove(LPCTSTR lpszFileName);

4.文件更名MFC:

TCHAR* pOldName = _T("Oldname_File.dat");

TCHAR* pNewName = _T("Renamed_File.dat");

try

{

   CFile::Rename(pOldName, pNewName);

}

catch(CFileException* pEx )

{

   TRACE(_T("File %20s not found, cause = %d/n"), pOldName,

   pEx->m_cause);

   pEx->Delete();

}

遍历文件目录

遍历文件目录,即把一个目录里的文件以及子目录里的文件名都取出来。本文是CFileFind类的使用例的笔记。下面的程序是从一个目录出发,把这个目录里的所有成员按着层次TRACE到DEBUG输出画面。

void TravelFolder(CString strDir, int nDepth)

{

CFileFind filefind;                                         //声明CFileFind类型变量

CString strWildpath = strDir + _T("//*.*");     //所有文件都列出。

if(filefind.FindFile(strWildpath, 0))                    //开始检索文件

{

BOOL bRet = TRUE;

while(bRet)

{

bRet = filefind.FindNextFile();                 //枚举一个文件

if(filefind.IsDots())                                 //如果是. 或 .. 做下一个

continue;

for (int i = 0; i < nDepth; i ++)                 //层次空格打印

{

TRACE(_T("    "));

}

if(!filefind.IsDirectory())                          //不是子目录,把文件名打印出来

{

CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName();

TRACE(_T("file = %s/r/n"), strTextOut);

}

else                                                    //如果是子目录,递归调用该函数

{

CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName();

TRACE(_T("dir = %s/r/n"), strTextOut);

TravelFolder(strTextOut, nDepth + 1);//递归调用该函数打印子目录里的文件

}

}

filefind.Close();

}

}

//测试,把d盘的/temp里的所有文件和子目录打印到DEBUG输出画面。

void Test()

{

TravelFolder(CString(_T("d://temp")), 0);

}

文件目录操作

1.创建目录(API)

BOOL CreateDirectory(LPCTSTR pstrDirName);//pstrDirName是全路径

2.删除目录(API)

BOOL RemoveDirectory( LPCTSTR lpPathName );

3.判断目录是否存在(Shell Function)

#include <shlwapi.h>#pragma comment(lib, "shlwapi.lib") if (PathIsDirectory(_T("d://temp"))) AfxMessageBox(_T("存在"));else AfxMessageBox(_T("不存在"));

4.取得当前目录(API)

DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );

5.取得执行文件所在目录(API)

DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );

6.取得功能目录(Shell Function)

BOOL SHGetSpecialFolderPath( HWND hwndOwner,  LPTSTR lpszPath, int nFolder, BOOL fCreate);

例:读取我的档案目录

TCHAR szDirFile[1024];
   memset(szDirFile, 0, sizeof(szDirFile));
   BOOL bRet = SHGetSpecialFolderPath(NULL,szDirFile,CSIDL_PERSONAL,true);
   if (bRet)
   {
       AfxMessageBox(szDirFile);
   }

7.选择目录用的对话框界面

利用Shell Function可以打出选择目录用的对话框界面

#include<shlobj.h>

INT CALLBACK _BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM pData)

{

TCHAR szDir[MAX_PATH];

switch(uMsg)

{

case BFFM_INITIALIZED:

// WParam is TRUE since you are passing a path.

// It would be FALSE if you were passing a pidl.

SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData);

break;

case BFFM_SELCHANGED:

// Set the status window to the currently selected path.

if (SHGetPathFromIDList((LPITEMIDLIST)lParam ,szDir))

{

SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);

}

break;

}

return 0;

}

CString GetFolderFullpath(LPCTSTR lpszDefault)

{

TCHAR buffDisplayName[MAX_PATH];

TCHAR fullpath[MAX_PATH];

BROWSEINFO  browseinfo;

LPITEMIDLIST lpitemidlist;

ZeroMemory(&browseinfo, sizeof( BROWSEINFO ));

browseinfo.pszDisplayName = buffDisplayName ;

browseinfo.lpszTitle = _T("请选择目录");

browseinfo.ulFlags = BIF_RETURNONLYFSDIRS;

browseinfo.lParam = (LPARAM)lpszDefault;

browseinfo.lpfn = _BrowseCallbackProc;

if(!(lpitemidlist = SHBrowseForFolder(&browseinfo)))

{

AfxMessageBox(_T("没有选择目录"));

return CString(_T(""));

}

else

{

SHGetPathFromIDList(lpitemidlist, fullpath);

CoTaskMemFree(lpitemidlist);

return CString(fullpath);

}

}

void CTest77Dlg::OnBnClickedButton1()

{

CString strFolderFullpath = GetFolderFullpath(_T("d://Temp"));

if (strFolderFullpath != _T(""))

AfxMessageBox(strFolderFullpath);

}

转载:http://blog.csdn.net/chaoguodong/article/details/7349022

转载于:https://blog.51cto.com/3457302/1383653

【转】VC++ MFC文件的移动复制删除更名遍历操作相关推荐

  1. c语言 trie树,C语言实现Trie树(字典树)的插入查找删除与遍历操作

    Trie树,也称作是字典树,是一种哈希树的变种,查询效率较高.Trie树可以用于统计或者排序大量的字符串,比如对一系列字符串按照字典序排序. 字典树是一个多叉树,每一个节点上存储的不是一个字符串,而是 ...

  2. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  3. js 删除服务器文件,Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录...

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门https://blog.csdn.net/qq_37860634 ...

  4. jquery对json 键值对或数组的增加、删除、遍历操作

    在前端遍历json键值对或数组遍历的情况也会经常用到,我们知道在java.c#其它的语言里提供方便的方法来操作,那么在json里面有没有类似的方法呢,废话就不多说了上代码: var jsonStr={ ...

  5. 学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均...

    /[例11-10]建立一个学生成绩信息(包括学号.姓名.成绩)的单向链表,学生数据按学号由小到大顺序排列,要求实现对成绩信息的插入.修改.删除和遍历操作./ /* 用链表实现学生成绩信息的管理 */ ...

  6. rf中resourceid_解决VC++ MFC程序resource.h头文件中ID重复问题

    解决VC++ MFC程序resource.h头文件中ID重复问题 2018-12-07 一般MFC开发的时候,如果有些资源是从其他工程中移植到本工程的, 而在资源移植的时候都要将对应的资源ID复制到本 ...

  7. mfc中文本文件和文件夹的复制移动

    mfc中文本文件和文件夹的复制移动 1.文件的移动 BOOL bMoveOK = MoveFile(_T("D:\\log.txt"), _T("D:\\1\\789.t ...

  8. php剪切文件,C/C++文件剪切复制删除

    我们在写某些程序有破坏性的程序的时候,往往会对程序进行剪切复制删除等操作, 下面就来简单讲解下剪切复制删除, 文件的复制#include #include int main() { DWORD get ...

  9. VC批量拷贝,移动,删除文件---SHFileOperation

    SHFileOperation 函数功能描述:文件操作,与 Shell 的动作相同. 函数原型: #include<shellapi.h> WINSHELLAPI int WINAPI S ...

最新文章

  1. android 开发--获取文件的扩展名和去掉文件的扩展名
  2. 高性能的关键:Spring MVC的异步模式
  3. List的遍历 Java
  4. 元祖数据mysql_MySQL数据库——表操作
  5. dept在Java里面_EmpDeptManager 在JavaEE环境下搭建三大框架体系实现员工的增删改查系统 Develop 261万源代码下载- www.pudn.com...
  6. Linux启动时 Error 15: File not found 问题解决方法
  7. lwip协议栈实现服务器端主动发送,《LwIP协议栈源码详解——TCP/IP协议的实现》IP层输入...
  8. php bt种子转换电驴地址,bt转换ed2k_BT文件转磁力链接工具 BT种子文件转换成ed2k链接...
  9. 咖啡种类、做法和历史来源
  10. libigl cot laplacian 计算方式
  11. idea常用的搜索方式
  12. MiCT: Mixed 3D/2D convolutional tube for human action recognition
  13. 自学Python 57 多线程开发(七)使用 Connection对象和共享对象 Shared
  14. Allegro PCB的5种形状Symbol类型
  15. 计算机视觉摔倒检测,有关摔倒检测数据集(fall detection databases)
  16. RobotCraft 2019第四届机器人技术国际学院Robotics Craftsmanship International Academy(译)
  17. LINUX系统编程 LINUX 虚拟内存
  18. Datawhale7月组队学习task1数据加载及探索性数据分析
  19. windows消息处理过程及消息钩子
  20. 史上最详细浏览器端网页截图方案分析

热门文章

  1. CallByName的一些缺陷
  2. sqlite fts5 编译 xcode other c flags
  3. Java学习_day008面向对象(OOP):对象和类
  4. mysql innodbuffer修改_mysql参数之innodb_buffer_pool_size大小设置
  5. bash: go: 未找到命令_【安全入门】centos7java/python/go语言环境安装
  6. c语言二叉树最小值,C语言递归之二叉树的最小深度
  7. mediumtext_mediumtext数据类型 | 学步园
  8. seaborn系列 (18) | 线性回归图regplot()
  9. 佛山市禅城区计算机培训机构排名前十,佛山名气大的机器人编程教育品牌排名...
  10. mysql 中lock wait_应用中MYSQL 报错Lock wait timeout exceeded; try restarting transaction