zoukankan      html  css  js  c++  java
  • vc关于文件拷贝 解压

    单个文件的拷贝

     system  针对单个文件

    CopyFile  针对单个文件

     
    /**
    @file_extension egg: .txt .png
    **/
    void CopyFileToDir(CString source_dir, TCHAR* dest_dir, TCHAR* file_extension) {
    CString source, dest;
    source.Format("%s*%s", source_dir, file_extension);
    dest.Format("%s", dest_dir);
     
    SHFILEOPSTRUCT s;
    ::ZeroMemory(&s, sizeof(s)); // Initialize the structure
     
    s.hwnd = NULL;
    s.wFunc = FO_COPY;
    s.pFrom = source;
    s.pTo = dest;
    s.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
     
    ::SHFileOperation(&s);
    //可用支持批量处理拷贝,支持单个文件拷贝,
    //如果拷贝的目标目录路径或源目录路径里面带下划线,不能正常拷贝,不知道为什么??

     //s.wFunc = FO_MOVE; 如果移动的目标目录路径或源目录路径里面带下划线
    //能正常移动文件

    -----------------------------------------------------------

     SHFILEOPSTRUCT 这个命令不稳定,不建议使用 ------12.29 4:42:59

     
     
    //CString cmd;
    //char   buffer[MAX_PATH];
    //_getcwd(buffer, MAX_PATH);
    //cmd.Format("COPY %s %s ", "C:\Users\jack\Desktop\copy_from\*.jpg", buffer);
    //system(cmd);
    //不可用 system仅仅支持文件对文件的拷贝
     
     
    //system("COPY C:\Users\jack\Desktop\copyfrom\*.jpg ./");//不可用,不能使用文件拷贝到目录
    //不可用 system仅仅支持文件对文件的拷贝
     
    system(

    "COPY

    C:\Users\jack\Desktop\copyfrom\1345233921.jpg

    C:\Users\jack\Desktop\copyfrom\xxxxxxxxxxxxxxxxxxxx.jpg");

    //可用 system支持文件对文件的拷贝

    system("COPY

    C:\Users\jack\Desktop\copy_from\1345233921.jpg

    C:\Users\jack\Desktop\copy_from\xxxxxxxxxxxxxxxxxxxx.jpg"); 

     //可用 支持带下划线的目录拷贝

     
     
    bool bFailIfExists=false;
    CopyFile(

    "C:\Users\jack\Desktop\copyfrom\1345233921.jpg",

    "C:\Users\jack\Desktop\copyfrom\xxxxxxxxxxxxxxxxxxxx.jpg", bFailIfExists);

    //可用 CopyFile只针对文件对文件的处理,不支持批量导入
     
     
    CopyFile("C:\Users\jack\Desktop\copyfrom\1345233921.jpg", "./xxxxxxxxxxxx.jpg", bFailIfExists);
    //可用  CopyFile只针对文件对文件的处理,支持当前目录 不支持批量导入
    bool bFailIfExists=false;
    CopyFile("C:\Users\jack\Desktop\copy_from\1345233921.jpg", "C:\Users\jack\Desktop\copy_from\xxxxxxxxxxxxxxxxxxxx.jpg", bFailIfExists);

     //可用 支持带下划线的目录拷贝

     
     
    //CopyFile("C:\Users\jack\Desktop\copyfrom\1345233921.jpg", "./", bFailIfExists);
    //不可用 不支持文件对目录
     
     
    //CopyFile("C:\Users\jack\Desktop\copyfrom\*.jpg", "./xxxxxxxxxxxx.jpg", bFailIfExists);
    //不可用 不支持批量处理
     
    }
     
    解压zip文件
    头文件
    #pragma once
    
    
    
    class OZipFile
    {
    public:
        OZipFile();
        ~OZipFile();
    protected:
        
    public:
        
        bool UnZipFile(CString strFileName,CString strPassword,CString strOutputPath);
        bool UnZipFileUseRar(CString strFileName, CString strPassword, CString strOutputPath);
        bool UnZipFileUse7Z(CString strFileName, CString strPassword, CString strOutputPath);
        CString Get7ZExePath();
        void CreateFilePath(CString strPath);
        void FormatDirectorys(CString & strPath);
    };

    文件

    #include "stdafx.h"
    
    #include "OZipFile.h"
    
    
    OZipFile::OZipFile()
    {
    }
    
    
    OZipFile::~OZipFile()
    {
    }
    
    
    
    bool OZipFile::UnZipFileUseRar(CString strFileName, CString strPassword, CString strOutputPath)
    {
        USES_CONVERSION;
        //CString strRarExePath = CPublicFunction::GetRarExePath();
        CString strRarExePath = GetExePath() + _T("zip\");
        CString param = _T("e -p");
        param += strPassword;
        param += _T(" ");
        param += strFileName;
        param += _T(" ");
        param += strOutputPath;
    
        CString lstCmd = strRarExePath + _T(" ");
        lstCmd += param;
        WinExec(T2A(lstCmd),SW_HIDE);
        return false;
    }
    /*
    要求:安装好了7z.exe
    @strFileName zip文件的全路径  如C:1_MyApp7.zip
    @strPassword 
    @strOutputPath 输出路径 如 c:Doc
    */
    bool OZipFile::UnZipFileUse7Z(CString strFileName, CString strPassword, CString strOutputPath)
    {
        //C:1_MyApp7 - Zip7z.exe x newPack.zip - oc:Doc - aoa
        USES_CONVERSION;
        CString strRarExePath = Get7ZExePath();//7z.exe的全文件路径
        CString param = _T("x ");
        param += strFileName;
        if (!strPassword.IsEmpty())
        {
            param += _T(" -p");
            param += strPassword;
        }
        param += _T(" -o");
        param += strOutputPath;
        param += _T(" -aos");
    
        CString lstCmd = strRarExePath + _T(" ");
        lstCmd += param;
        //WinExec(T2A(lstCmd), SW_HIDE);
    
        STARTUPINFO si = { 0 };
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(STARTUPINFO);
        GetStartupInfo(&si);
        si.wShowWindow = SW_SHOW;
        si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    
        // 运行进程
        PROCESS_INFORMATION pi;
        ZeroMemory(&pi, sizeof(pi));
    
        TCHAR cmdline[MAX_PATH] = { 0 };
        _tcscpy_s(cmdline, MAX_PATH, lstCmd);
        BOOL bRet = FALSE;
        bRet = CreateProcess(NULL, cmdline, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
    
        if (bRet)
        {
            WaitForSingleObject(pi.hProcess, INFINITE);
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
        }
        //int a = GetLastError();
        return false;
    }
    
    CString OZipFile::Get7ZExePath()
    {
        return GetExePath() + _T("7z.exe");
    }
    
    
    void OZipFile::CreateFilePath(CString strPath)
    {
        if (strPath.Find(_T("\\")))
        {
            strPath.Replace(_T("\\"), _T("\"));
        }
        if (-1 != strPath.Find(_T("//")))
        {
            strPath.Replace(_T("//"), _T("\"));
        }
        if (-1 != strPath.Find(_T("////")))
        {
            strPath.Replace(_T("////"), _T("\"));
        }
        if (-1 != strPath.Find(_T("/")))
        {
            strPath.Replace(_T("/"), _T("\"));
        }
    
        int nPos;
        CString strFolder;
    
        for (nPos = 0; nPos != -1; nPos = strPath.Find(_T("\")))
        {
            nPos = strPath.Find(_T("\"));
            strFolder += strPath.Left(nPos);
            if (!PathFileExists(strFolder))
            {
                CreateDirectory(strFolder, NULL);
            }
            strPath = strPath.Mid(nPos + 1);
            strFolder += _T("\");
        }
    }
    
    void OZipFile::FormatDirectorys(CString &strPath)
    {
        if (strPath.Find(_T("\\")))
        {
            strPath.Replace(_T("\\"), _T("\"));
        }
        if (-1 != strPath.Find(_T("//")))
        {
            strPath.Replace(_T("//"), _T("\"));
        }
        if (-1 != strPath.Find(_T("////")))
        {
            strPath.Replace(_T("////"), _T("\"));
        }
        if (-1 != strPath.Find(_T("/")))
        {
            strPath.Replace(_T("/"), _T("\"));
        }
    }
  • 相关阅读:
    hdu 1281 棋盘游戏(二分匹配)
    UVA 12545 Bits Equalizer
    算法之匈牙利算法
    I题 hdu 1234 开门人和关门人
    H题 hdu 2520 我是菜鸟,我怕谁
    G题 hdu 1466 计算直线的交点数
    F题 hdu 1431 素数回文
    E题hdu 1425 sort
    D题 hdu 1412 {A} + {B}
    有12个球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,需要几次把这个小球找出来并且求出这个小球是比其他的轻还是重
  • 原文地址:https://www.cnblogs.com/baldermurphy/p/6226279.html
Copyright © 2011-2022 走看看