• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            c++ file and directory 刪除,移動,目錄瀏覽對話框,找某目錄下的所有文件(包括子目錄)

            Delete folders, subfolders and files easily

            <PRE>void RecursiveDelete(CString szPath)
            {
                CFileFind ff;
                CString path 
            = szPath;
                
                
            if(path.Right(1!= "\\")
                    path 
            += "\\";

                path 
            += "*.*";

                BOOL res 
            = ff.FindFile(path);

                
            while(res)
                
            {
                    res 
            = ff.FindNextFile();
                    
            if (!ff.IsDots() && !ff.IsDirectory())
                        DeleteFile(ff.GetFilePath());
                    
            else if (ff.IsDirectory())
                    
            {
                        path 
            = ff.GetFilePath();
                        RecursiveDelete(path);
                        RemoveDirectory(path);
                    }

                }

            }
            </PRE>

            The CreateDir function creates folders and subfolders thereby completing the whole path passed to it. If the folder already exists, it is left unaffected, but if it doesn't exist, it is created. The CreateDirectory WIN32 API lets us create a directory, but it works only if the parent directory already exists. This function overcomes this limitation.

            <PRE>void CreateDir(char* Path)
            {
             
            char DirName[256];
             
            char* p = Path;
             
            char* q = DirName; 
             
            while(*p)
             
            {
               
            if (('\\' == *p) || ('/' == *p))
               
            {
                 
            if (':' != *(p-1))
                 
            {
                    CreateDirectory(DirName, NULL);
                 }

               }

               
            *q++ = *p++;
               
            *= '\0';
             }

             CreateDirectory(DirName, NULL);
            }
            </PRE>

            The DeleteAllFiles function deletes all the files (not folders) present in the specified path:

            <PRE>void DeleteAllFiles(char* folderPath)
            {
             
            char fileFound[256];
             WIN32_FIND_DATA info;
             HANDLE hp; 
             sprintf(fileFound, 
            "%s\\*.*", folderPath);
             hp 
            = FindFirstFile(fileFound, &info);
             
            do
                
            {
                   sprintf(fileFound,
            "%s\\%s", folderPath, info.cFileName);
                   DeleteFile(fileFound);
             
                }
            while(FindNextFile(hp, &info)); 
             FindClose(hp);
            }
            </PRE>


            The EmptyDirectory function deletes all the contents from a specified directory. The RemoveDirectory WIN32 API deletes an existing empty directory, but it doesn't work if the directory isn't empty. This function overcomes this limitation:

            <PRE>void EmptyDirectory(char* folderPath)
            {
             
            char fileFound[256];
             WIN32_FIND_DATA info;
             HANDLE hp; 
             sprintf(fileFound, 
            "%s\\*.*", folderPath);
             hp 
            = FindFirstFile(fileFound, &info);
             
            do
                
            {
                    
            if (!((strcmp(info.cFileName, ".")==0)||
                          (strcmp(info.cFileName, 
            "..")==0)))
                    
            {
                      
            if((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==
                                                 FILE_ATTRIBUTE_DIRECTORY)
                      
            {
                          
            string subFolder = folderPath;
                          subFolder.append(
            "\\");
                          subFolder.append(info.cFileName);
                          EmptyDirectory((
            char*)subFolder.c_str());
                          RemoveDirectory(subFolder.c_str());
                      }

                      
            else
                      
            {
                          sprintf(fileFound,
            "%s\\%s", folderPath, info.cFileName);
                          BOOL retVal 
            = DeleteFile(fileFound);
                      }

                    }

             
                }
            while(FindNextFile(hp, &info)); 
             FindClose(hp);
            }
            </PRE>

            瀏覽目錄dialog:
            void CTestBrowseDlg::OnBrowse() 
            {
                CString str;
                BROWSEINFO bi;
                
            char name[MAX_PATH];
                ZeroMemory(
            &bi,sizeof(BROWSEINFO));
                bi.hwndOwner
            =GetSafeHwnd();
                bi.pszDisplayName
            =name;
                bi.lpszTitle
            ="Select folder";
                bi.ulFlags
            =BIF_USENEWUI;
                LPITEMIDLIST idl
            =SHBrowseForFolder(&bi);
                
            if(idl==NULL)
                    
            return;
                SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
                str.ReleaseBuffer();
                m_Path
            =str;
                
            if(str.GetAt(str.GetLength()-1)!='\\')
                    m_Path
            +="\\";
                UpdateData(FALSE);
            }

            得到某目錄下的所有文件:
            void RecursiveDelete(CString szPath)
            {
                CFileFind ff;
                CString path 
            = szPath;

                
            if(path.Right(1!= "\\")
                    path 
            += "\\";

                path 
            += "*.*";

                BOOL res 
            = ff.FindFile(path);

                
            while(res)
                
            {
                    res 
            = ff.FindNextFile();
                    
            if ( !ff.IsDots()&&ff.IsDirectory())
                    
            {
                        
                        path 
            = ff.GetFilePath();
                        RecursiveDelete(path);
                    }

                    
            else if (!ff.IsDirectory()&&!ff.IsDots())
                    
            {
                        CString ss ; ss
            = ff.GetFileName();
                        printf(
            "%s\n",ss);
                        
                    }

                }

                ff.Close();
            }

            posted on 2006-01-12 14:52 夢在天涯 閱讀(5814) 評論(4)  編輯 收藏 引用 所屬分類: CPlusPlus 、MFC/QT

            評論

            # re: c++ file and directory 2006-01-12 15:12 小明

            一點小問題:

            因為DeleteFile不能Delete掉只讀文件,所以最好在DeleteFile之前,使用SetFileAttributes(file,FILE_ATTRIBUTE_NORMAL);  回復  更多評論   

            # re: c++ file and directory 2006-01-12 16:39 夢在天涯

            也可以用searchpath()來找,是嗎?可惜就是沒有找到例子!
            那位有的話,貢獻一下啊,謝謝!  回復  更多評論   

            # re: c++ file and directory 2006-02-09 16:49 夢在天涯

            -------------------------------------------------------------------
            、獲得當前應用程序路徑
            #include < windows.h >
            #include < string.h >

            HINSTANCE hInst;
            char szBuf[256];
            char *p;

            //拿到全部路徑
            GetModuleFileName(hInst,szBuf,sizeof(szBuf));

            //分離路徑和文件名。
            p = szBuf;
            while(strchr(p,'\\')) {
            p = strchr(p,'\\');
            p++;
            }
            *p = '\0';
            //路徑在szBuf理了。  回復  更多評論   

            # re: c++ file and directory 2006-02-20 12:01 blue_bean

            用SHFileOperation,可以刪除只讀文件。


            SHFILEOPSTRUCT op;
            memset(&op, 0, sizeof(op));
            op.pFrom = "c:\\text.ini";
            op.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
            op.wFunc = FO_DELETE;
            if (SHFileOperation(&op) != 0)
            {
            // delete error
            }   回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1808118
            • 排名 - 5

            最新評論

            閱讀排行榜

            色欲综合久久躁天天躁蜜桃| 青青草国产精品久久久久| 国产成人精品久久亚洲高清不卡 | 亚洲成色999久久网站| 久久性精品| 国产韩国精品一区二区三区久久| 久久精品亚洲男人的天堂 | 97精品国产97久久久久久免费| 成人国内精品久久久久一区| 亚洲欧美成人久久综合中文网| 国产精品久久国产精品99盘 | 久久精品亚洲AV久久久无码| 欧美午夜精品久久久久免费视| 久久露脸国产精品| 蜜桃麻豆WWW久久囤产精品| 办公室久久精品| 中文字幕久久久久人妻| 99热都是精品久久久久久| 国产偷久久久精品专区| 国内精品久久久久影院网站 | 亚洲精品乱码久久久久久自慰| 久久丫精品国产亚洲av| 久久夜色精品国产www| 国内精品人妻无码久久久影院| 天天做夜夜做久久做狠狠| 久久免费大片| 久久国产高清字幕中文| 久久中文字幕一区二区| 麻豆亚洲AV永久无码精品久久| 亚洲国产成人乱码精品女人久久久不卡| 国产成人久久精品激情| 国产激情久久久久久熟女老人 | 91精品国产高清久久久久久91| 无遮挡粉嫩小泬久久久久久久| 欧美久久天天综合香蕉伊| 99热热久久这里只有精品68| av午夜福利一片免费看久久| 久久久久久九九99精品| 久久99精品久久久久久9蜜桃| 狠色狠色狠狠色综合久久| 人妻无码久久一区二区三区免费|