• <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

            最新評論

            閱讀排行榜

            久久777国产线看观看精品| 亚洲精品国产第一综合99久久| 国产真实乱对白精彩久久| 国产一区二区精品久久| 久久99国产综合精品女同| 韩国无遮挡三级久久| 久久综合狠狠色综合伊人| 免费一级欧美大片久久网 | 久久人爽人人爽人人片AV| 国产精品美女久久久| 麻豆精品久久久久久久99蜜桃| 99re久久精品国产首页2020| 久久国产影院| 亚洲国产二区三区久久| 久久久久久夜精品精品免费啦| 久久久久亚洲?V成人无码| 亚洲国产精品久久电影欧美| 97视频久久久| 欧美精品一本久久男人的天堂| 色老头网站久久网| 26uuu久久五月天| 99精品久久久久中文字幕| 久久久久久久久久久| 无码8090精品久久一区| 青青草原综合久久| 少妇人妻88久久中文字幕| 大蕉久久伊人中文字幕| 99久久www免费人成精品| 久久亚洲私人国产精品| 免费无码国产欧美久久18| 日本久久中文字幕| 精品久久久久久国产牛牛app| 99久久中文字幕| 久久棈精品久久久久久噜噜| 久久这里只有精品首页| 狠狠色丁香婷婷久久综合五月| 青草久久久国产线免观| 狠狠久久综合| 精品久久国产一区二区三区香蕉 | 国产成人久久精品激情| 人妻精品久久久久中文字幕69|