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


    MFC基于对话框的Demo

    txt中每行一个23位的卡号。

    文件夹中包含以卡号命名的图像文件。(fpt或者bmp文件)

    要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来。

    VC6.0写的。

    太懒了,代码以前写过,直接复制就OK。

    **.cpp

    下边的代码比较常用and改动比较大,备忘一下。

    void CRenameFileDlg::OnButton1() 
    {//按钮1
        UpdateData();
        char buf[MAX_PATH] = {0};
        if (select_any(buf))
        {
            m_pathname=buf;
            UpdateData(FALSE);
        }
        
    }
    void CRenameFileDlg::OnButton2() 
    {//按钮2
        UpdateData();
        //生成一个打开对话框
        CFileDialog *lpszOpenFile;    
        lpszOpenFile = new CFileDialog
            (TRUE,"ccd.txt","",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , "文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|");
        
        if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮
        {
            m_pathname2 = lpszOpenFile->GetPathName();//得到打开文件的路径
            SetWindowText(m_pathname2);//在窗口标题上显示路径
        }
        UpdateData(FALSE);
    }
    void CRenameFileDlg::OnButton3() 
    {//按钮3
        
        UpdateData();
        char buf[MAX_PATH] = {0};
        if (select_any(buf))
        {
            m_newfilepath=buf;
            UpdateData(FALSE);
        }    
    }
    void CRenameFileDlg::OnBUTTON2ok() 
    {//按钮4
        strtemp="";
        UpdateData();
        if (m_pathname=="")
        {
            MessageBox("请选择路径","提示",MB_OK);return;
        }
    
        h_FileFile(m_pathname);    ////
        theApp.AddtoTxt(strtemp);
        AfxMessageBox(" 操作已完成!");    
        
    }

    遍历文件夹并处理的模子函数。

    void  CRenameFileDlg::h_FileFile(CString path)
    {
        CString filePath=path+_T("//*.*");//能遍历所有子文件夹
        //CString filePath=path+_T("//*.bmp");  不能遍历
        CFileFind fileFinder;
        BOOL bFinished = fileFinder.FindFile(filePath);
    
    
        
        while(bFinished)  //每次循环对应一个类别目录
        { 
            bFinished = fileFinder.FindNextFile();        
            if(fileFinder.IsDirectory() && !fileFinder.IsDots())  //若是目录则递归调用此方法
            {
                h_FileFile(fileFinder.GetFilePath());
            }
            else  //判断文件名是否在txt中
            {
            
                //获取路径名  c:123456.bmp
                 CString path2=fileFinder.GetFilePath();
                //获取文件名 456.bmp
                CString fileName = fileFinder.GetFileName();////获得不包含路径的  文件名.后缀 
            
    
            
                CString f_fix,f_fname;
                f_fix=fileName.Right(4);
                f_fname=fileName.Left(23);
                if (f_fix==".bmp")
                {
                
                    /////////////////
                
                    CStdioFile file;
    
                
                    if(!file.Open(m_pathname2,CFile::modeRead))
                    {
                        MessageBox("can not open file!");
                        return;
                    }
                    
                    
                    CString strLine,strTemp,strrow;  //strLine:txt每行的内容
                    while(file.ReadString(strLine))
                    {
                        CString str,p;
                        str= strLine.GetBufferSetLength(strLine.GetLength());
                        if(strLine!="")
                        {  
                        
                            if (f_fname==str.Left(23))//
                            {    
                                
                            //可以自己写各种处理函数

    strtemp=strtemp+fileFinder.GetFilePath()+" "; } } } ////////////////////////// } }//end_else }//end while }

    我常用的。

    复制文件函数
    函数原型
    BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists );
    
    CopyFile(源文件,目标文件,FALSE);  //FALSE覆盖
    CopyFile(c:123456.fpt,c:
    ewfilefolder678.fpt,FALSE);
    
    
    移动文件函数声明
    BOOL MoveFile(
    LPCTSTR lpExistingFileName, // file name
    LPCTSTR lpNewFileName // new file name
    );
    用例
    MoveFile("C:\File1.txt","C:\File3.txt");
    函数功能
    移动一个存在的文件或者目录(包括子目录)
    参数说明
    lpExistingFileName 一个存在的文件或者文件夹字符串指针
    lpNewFileName 一个还没存在的文件或者文件夹的字符串指针
    
    
    
    用法
    DeleteFile 方法删除指定文件。
    BOOL DeleteFile(
    LPCSTRlpFileName//要删除的文件名的指针
    );
    参数
    lpFileName
    必选项。要删除文件的路径。
    返回值
    成功返回非零,失败返回0
    更多错误信息使用GetLastError获取。
    如果程序尝试删除一个不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUND。如果文件是只读 的,则GetLastError返回ERROR_ACCESS_DENIED
    
    //获取路径名
                 CString path2=fileFinder.GetFilePath();    //AfxMessageBox("path2="+path2);
                //获取文件名
                CString fileName = fileFinder.GetFileName();
    
            
        CString DelfilePath;
        int dotPos33=path2.ReverseFind('\');
        DelfilePath=path2.Left(dotPos33)+'\';   
        
          //删除文件
                if (fileName.Find("-01.bmp")!=-1)
                {
                    //AfxMessageBox("匹配删除  "+DelfilePath+fileName);
                    DeleteFile(DelfilePath+fileName);
                    
                    
                }

    ---------End---------

    CopyFile只能复制文件,不能复制该文件的文件夹,复制文件夹的代码  待验证。(懒,猴年马月 试试)

    SHFILEOPSTRUCT   sfo; 
    sfo.hwnd   =   NULL;
    sfo.wFunc   =   FO_COPY;
    sfo.pFrom   =   "c:\My_Docs1 ";  
    sfo.pTo   =   "c:\My_Docs2 ";
    sfo.fFlags   =   FOF_SILENT   |   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR;
    hr   =   SHFileOperation(&sfo);

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

    我想把一个文件夹移动到另一个路径,连同文件夹下的所有子文件和子文件夹!例如 f:a 是个文件夹,把整个 b 文件夹移动到 d: 。希望能通过一个函数来实现。假如函数为 Movefolder(CString s,CString d),c 和 d 分别保存着原文件夹和目标文件夹的路径。希望高人能给出完整的代码,如果参数不是CString的,能给出转换代码!!
    
    BOOL MoveFolder(CString strSrcPath, CString strDestPath)
    {
        strSrcPath += _T('');//注意这里一定要加_T(''),不要写成_T("");
        SHFILEOPSTRUCT si = {0};
        si.hwnd = ::GetDesktopWindow();
        si.wFunc = FO_COPY;
        si.pFrom = strSrcPath;
        si.pTo = strDestPath;
        si.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
     
        return 0 == SHFileOperation(&si);
    }
    
    ----------
    void myCopyDirectory(CString source, CString target)  
    {  
        CreateDirectory(target,NULL); //创建目标文件夹  
        //AfxMessageBox("创建文件夹"+target);  
        CFileFind finder;  
        CString path;  
            path.Format("%s/*.*",source);  
        AfxMessageBox(path);  
        bool bWorking = finder.FindFile(path);  
        while(bWorking){  
            bWorking = finder.FindNextFile();  
            AfxMessageBox(finder.GetFileName());  
            if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..  
                myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()  
            }  
            else{ //是文件 则直接复制  
                //AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()  
                CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);  
            }  
        }  
    }
  • 相关阅读:
    架构设计
    第七章
    第六章
    第五章
    第四章
    第三章
    第二章
    第一章
    链表中环
    实现链表中的部分翻转
  • 原文地址:https://www.cnblogs.com/china-hxx/p/5714553.html
Copyright © 2020-2023  润新知