• MyFile 类 vc++


    MyFile.h

    #pragma once
    #include <string>
    #include <Windows.h>
    #include <iostream>
    #include <stdio.h>
    #include <io.h>
    #include <string>
    #include <Shlwapi.h>
    using namespace std;
    class CMyFile
    {
    public:
        explicit CMyFile(void);
        ~CMyFile(void);
        static void MyCopyFile(string sourceFilePath,string destFilePath);
        static void MyDeleteDirectory(string fileDir);
    };

    MyFile.cpp

    #include "StdAfx.h"
    #include "MyFile.h"
    LPCWSTR StringToLPCWSTR(string orig);
    void CopyFileRealize(string filePath,string destPath,string sourcePathT);
    void FindAllFile(string sourcePath,string destPath,string sourcePathT);
    bool DeleteDirectory(LPCTSTR lpszDir, bool noRecycleBin);
    CMyFile::CMyFile(void)
    {
        
    }
    CMyFile::~CMyFile(void)
    {
    }
    ///
    //sourceFilePath 要复制的文件
    //destFilePaht 目标文件
    
    
    ///
    void CMyFile::MyCopyFile(string sourceFilePath,string destFilePath)
    {
        FindAllFile(sourceFilePath,destFilePath,sourceFilePath);
    }
    void CMyFile::MyDeleteDirectory(string fileDir)
    {
        LPCWSTR wFilePath=StringToLPCWSTR(fileDir);
        DeleteDirectory(wFilePath,true);
    }
    void CopyFileRealize(string filePath,string destPath,string sourcePathT)
    {
        string newFilePath=filePath;    
        int replaceLength=sourcePathT.find_last_of("\\");
        newFilePath.replace(0,replaceLength,destPath);    
        int lastIndex=newFilePath.find_last_of("\\");
        string destDir=newFilePath.substr(0,lastIndex);
        string destFileName=newFilePath.substr(lastIndex);
        LPCWSTR wFilePath=StringToLPCWSTR(filePath);
        LPCWSTR wDestDir=StringToLPCWSTR(destDir);
        LPCWSTR wDestFilePath=StringToLPCWSTR(destDir+destFileName);
        if(_access(destDir.c_str(),0)==-1)
        {
            CreateDirectory(wDestDir,NULL);
        }    
        CopyFile(wFilePath,wDestFilePath,FALSE);  
        
    }
    bool DeleteDirectory(LPCTSTR lpszDir, bool noRecycleBin = true)
    {
        int len = _tcslen(lpszDir);
        TCHAR *pszFrom = new TCHAR[len+2];
        _tcscpy(pszFrom, lpszDir);
        pszFrom[len] = 0;
        pszFrom[len+1] = 0;
    
        SHFILEOPSTRUCT fileop;
        fileop.hwnd   = NULL;    // no status display
        fileop.wFunc  = FO_DELETE;  // delete operation
        fileop.pFrom  = pszFrom;  // source file name as double null terminated string
        fileop.pTo    = NULL;    // no destination needed
        fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT;  // do not prompt the user
    
        if(!noRecycleBin)
            fileop.fFlags |= FOF_ALLOWUNDO;
    
        fileop.fAnyOperationsAborted = FALSE;
        fileop.lpszProgressTitle     = NULL;
        fileop.hNameMappings         = NULL;
    
        int ret = SHFileOperation(&fileop);
        delete [] pszFrom;  
        return (ret == 0);
    }
    void FindAllFile(string sourcePath,string destPath,string sourcePathT)
    {    
        struct _finddata_t FileInfo;
        string strFind=sourcePath+"\\*";
    
        long Handle=_findfirst(strFind.c_str(),&FileInfo);
        if(Handle==-1L)
        {
            cerr << "can not match the folder path" << endl;        
            exit(-1);
        }
    
     do{
            //判断是否有子目录
            if((FileInfo.attrib&_A_SUBDIR)==_A_SUBDIR)
            {
                if((strcmp(FileInfo.name,".")!=0)&&(strcmp(FileInfo.name,"..")!=0))
                {                
                    string newPath=sourcePath+"\\"+FileInfo.name;                
                    FindAllFile(newPath,destPath,sourcePathT);
                }
                
            }
            else
            {
                string filePath=sourcePath+"\\"+FileInfo.name;
                CopyFileRealize(filePath,destPath,sourcePathT);                
            }
    
        }while(_findnext(Handle,&FileInfo)==0);
        _findclose(Handle);
        // fout.close();
    }
    LPCWSTR StringToLPCWSTR(string orig)
    {
        size_t origsize = orig.length() + 1;
        const size_t newsize = 100;
        size_t convertedChars = 0;
        wchar_t *wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(orig.length()-1));
        mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
        return wcstring;
    }

    CMyFile::MyDeleteDirectory("C:\\Messer_2.0changshi\\db");
    CMyFile::MyCopyFile("C:\\Program Files\\MDB\\db","C:\\Messer_2.0changshi");

  • 相关阅读:
    TDirectory.GetParent获取指定目录的父目录
    TDirectory.GetLogicalDrives获取本地逻辑驱动器
    获取设置目录创建、访问、修改时间
    TDirectory.GetLastAccessTime获取指定目录最后访问时间
    TDirectory.GetDirectoryRoot获取指定目录的根目录
    「洛谷P1262」间谍网络 解题报告
    「洛谷P1198」 [JSOI2008]最大数 解题报告
    「洛谷P3931」 SAC E#1
    「UVA1328」「POJ1961」 Period 解题报告
    「博客美化」I 页面的CSS
  • 原文地址:https://www.cnblogs.com/ike_li/p/3030781.html
Copyright © 2020-2023  润新知