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

VC++ MFC文件的移动复制删除更名遍历操作的更多相关文章

  1. java操作文件的创建、删除、遍历

    java操作文件的创建.删除.遍历: package test; import java.io.File; import java.io.IOException; import java.util.A ...

  2. VC/MFC 使edit控件不能进行粘贴操作

    这里使用消息拦截的方法 BOOL PersonDlg::PreTranslateMessage(MSG* pMsg) { if (GetDlgItem(IDC_EDIT_USER_ID)->m_ ...

  3. c++ 搜索二叉树 插入,删除,遍历操作

    搜索二叉树是一种具有良好排序和查找性能的二叉树数据结构,包括多种操作,本篇只介绍插入,排序(遍历),和删除操作,重点是删除操作比较复杂,用到的例子也是本人亲自画的 用到的测试图数据例子 第一.构建节点 ...

  4. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  5. C# 实现文件夹的复制以及删除

    代码来源:http://blog.163.com/u_tommy_520/blog/static/20406104420147493933662/ http://www.cnblogs.com/lov ...

  6. FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...

  7. java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除

    最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索   在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...

  8. Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  9. 转:MFC文件操作

    讲到文件操作我们会联想到自己手动操作文件会涉及到哪些内容.很容易想到的是查看文件(文件夹)是否存在,创建,复制,删除,剪切文件(文件夹).另外就是设置文件的属性. 那MFC中一些操作文件的类也差不多是 ...

随机推荐

  1. axios获取本地文件配置步骤

    首先修改一下config文件夹下面的index.js文件里面的配置,如下: 然后 ,通过axios 请求配置的接口 <script> import axios from 'axios' e ...

  2. unicode_start - 将控制台设为Unicode模式.

    总览 unicode_start [ font [ screen-font-map ] ] 描述 unicode_start 命令将显示屏及键盘设为 Unicode 模式, 并且有可能还会装载所用的 ...

  3. c++内存相关函数

    memset void *memset(void *s, int ch, size_t n); 函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ...

  4. Java位运算总结

    关于位运算,以前也见过,搜过,当时会用了,过后就忘了,今天好好学习一遍,然后整理一下. Java中的位运算,涉及到计算机的二进制,位用bit表示,1Byte=8bit,根据各种基本数据类型占用的字节空 ...

  5. 通过队列实现进程间的通信(使用阻塞方式调用func函数)

    #_author:来童星#date:2019/12/17#通过队列实现进程间的通信from multiprocessing import Poolimport osimport timedef fun ...

  6. BOM的介绍

    BOM的概念 BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的对象结构.BOM由多个对象组成,其中代表浏览器窗口的W ...

  7. MaxCompute小文件问题优化方案

    小文件背景知识 小文件定义 分布式文件系统按块Block存放,文件大小比块大小小的文件(默认块大小为64M),叫做小文件. 如何判断存在小文件数量多的问题 查看文件数量 desc extended + ...

  8. 树状数组优化dp——cf985E经典

    /* dp[i]=0|1 表示前i是否可以被成功分组, dp[i+1]能够变成1的三个条件 1:j∈[0,i-k]里存在dp[j]=1 2:dp[j]=1 3:a[i+1]-a[j+1]<=d ...

  9. D语言简介

    D语言,一种通用计算机程序语言,威力强大.功能丰富,支持多种编程范式,例如面向对象.[1]  D语言最初由Digital Mars公司就职的Walter Bright于2001年发布,意图改进C++语 ...

  10. c#种GetType()和TypeOf()的区别

    C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型. typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称:GetType ...