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

            最新評論

            閱讀排行榜

            久久久久亚洲精品日久生情 | 亚洲精品乱码久久久久66| 99久久精品免费看国产免费| 国产叼嘿久久精品久久| 久久99热这里只有精品国产| 久久九九兔免费精品6| 久久精品中文騷妇女内射| 国产精品嫩草影院久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久久老熟女一区二区三区| 69国产成人综合久久精品| 国内精品久久久久久久coent | 色综合久久88色综合天天| 久久久久亚洲AV成人网人人软件| 新狼窝色AV性久久久久久| 日韩精品国产自在久久现线拍| 久久这里的只有是精品23| 久久成人国产精品二三区| 久久久亚洲AV波多野结衣| 久久精品无码一区二区日韩AV| 精品国产乱码久久久久久人妻| 国产亚洲色婷婷久久99精品91 | 久久婷婷五月综合97色直播| 久久久久久夜精品精品免费啦| 色天使久久综合网天天| 一本久久久久久久| 精品久久久久久无码专区不卡| 超级97碰碰碰碰久久久久最新| 久久久久99精品成人片| 欧美久久精品一级c片片| 久久亚洲精品成人AV| 偷窥少妇久久久久久久久| 日本国产精品久久| 久久天天躁狠狠躁夜夜av浪潮| 大蕉久久伊人中文字幕| 日韩亚洲欧美久久久www综合网| 久久精品国产亚洲av高清漫画| 久久中文字幕人妻熟av女| 久久婷婷午色综合夜啪| 中文字幕精品久久| 亚洲愉拍99热成人精品热久久|