• <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 夢在天涯 閱讀(5812) 評論(4)  編輯 收藏 引用 所屬分類: CPlusPlusMFC/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

            搜索

            •  

            積分與排名

            • 積分 - 1807518
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久久久国产精品人妻| 欧美性猛交xxxx免费看久久久| 久久夜色精品国产噜噜亚洲a| 久久91精品综合国产首页| 无码任你躁久久久久久老妇| 亚洲日本va中文字幕久久| 成人国内精品久久久久影院| 国产99久久九九精品无码| 久久受www免费人成_看片中文| 久久久久亚洲AV片无码下载蜜桃| 久久夜色tv网站| 国产精品久久久久久五月尺| 久久久久亚洲AV无码网站| 香港aa三级久久三级老师2021国产三级精品三级在 | 色综合久久最新中文字幕| 无码精品久久一区二区三区| 久久偷看各类wc女厕嘘嘘| 武侠古典久久婷婷狼人伊人| 女人香蕉久久**毛片精品| av色综合久久天堂av色综合在| 99久久精品免费看国产一区二区三区 | 久久热这里只有精品在线观看| 99久久成人国产精品免费| 四虎久久影院| 性高朝久久久久久久久久| 青青草原综合久久大伊人精品| 色妞色综合久久夜夜| 亚洲伊人久久成综合人影院| 国产成人综合久久久久久| 国产亚洲综合久久系列| 人妻无码中文久久久久专区| 亚洲欧洲久久久精品| 日本亚洲色大成网站WWW久久| 91久久精品电影| 国产成人香蕉久久久久| 99国内精品久久久久久久| 精品乱码久久久久久夜夜嗨| 99久久精品无码一区二区毛片| 91精品国产综合久久精品| 国产成人久久精品一区二区三区| 91久久婷婷国产综合精品青草|