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

posted @ 2013-04-19 15:08  ike_li  阅读(303)  评论(0编辑  收藏  举报