青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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 夢在天涯 閱讀(5851) 評論(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

搜索

  •  

積分與排名

  • 積分 - 1818763
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              一区二区三区精密机械公司| 午夜影院日韩| 欧美v日韩v国产v| 亚洲国产精品ⅴa在线观看| 免费成人黄色| 免费欧美高清视频| 亚洲乱码精品一二三四区日韩在线| 欧美成人中文字幕| 欧美freesex8一10精品| 一本色道久久加勒比88综合| 亚洲精选91| 国产女优一区| 欧美成人精品在线| 欧美日韩国产精品一区二区亚洲| 亚洲一区三区电影在线观看| 欧美一区二区视频在线| 亚洲国产精品久久久久秋霞不卡| 亚洲人成网站色ww在线| 欧美日韩一区综合| 久久久人人人| 欧美日韩国产精品成人| 久久精品一区二区| 欧美激情欧美狂野欧美精品| 午夜亚洲精品| 欧美一区二区视频在线观看| 欧美在线观看www| 亚洲人成网站影音先锋播放| 亚洲一区精彩视频| 亚洲精品国产精品国自产在线| 一级日韩一区在线观看| 在线观看成人一级片| 9久草视频在线视频精品| 国产午夜精品视频| 亚洲伦理在线观看| 在线精品亚洲| 亚洲一区日本| 亚洲乱码视频| 久久久久久精| 欧美一区二区三区日韩| 欧美黄色一级视频| 久久久综合网站| 国产精品成人一区二区艾草| 欧美激情精品久久久久久变态| 国产精品国产三级国产aⅴ9色| 欧美国产日韩一二三区| 国产午夜精品美女视频明星a级| 日韩亚洲欧美精品| **性色生活片久久毛片| 香蕉免费一区二区三区在线观看| 99热这里只有成人精品国产| 久久综合国产精品台湾中文娱乐网| 亚洲欧美另类在线观看| 欧美激情一区二区三区成人| 欧美成人精品不卡视频在线观看 | 亚洲美女av黄| 影音先锋中文字幕一区二区| 亚洲欧美精品suv| 亚洲一区欧美激情| 国产精品啊啊啊| 亚洲人成亚洲人成在线观看| 亚洲电影欧美电影有声小说| 久久大综合网| 久久综合婷婷| 在线不卡欧美| 久久久综合网站| 免费一级欧美片在线观看| 狠狠入ady亚洲精品经典电影| 亚洲欧美国产一区二区三区| 亚洲欧美日韩一区二区| 欧美午夜不卡视频| 中文欧美字幕免费| 亚洲专区在线| 国产欧美精品一区二区三区介绍 | 一本久久精品一区二区| 一道本一区二区| 欧美日韩在线播放| 亚洲欧美bt| 久久综合一区| 亚洲国产另类久久精品| 欧美精品电影在线| 亚洲最新在线视频| 亚洲欧美综合| 激情婷婷久久| 欧美风情在线观看| 99av国产精品欲麻豆| 午夜亚洲福利| 伊人春色精品| 欧美精品在线极品| 亚洲一区精品视频| 免费成年人欧美视频| 日韩小视频在线观看专区| 欧美午夜精品久久久久久浪潮| 在线中文字幕一区| 久久久一区二区三区| 亚洲欧洲偷拍精品| 欧美香蕉大胸在线视频观看| 小黄鸭精品aⅴ导航网站入口| 美女日韩欧美| 亚洲一区尤物| 激情另类综合| 欧美日韩在线电影| 久久精视频免费在线久久完整在线看| 亚洲高清视频一区| 欧美在线视频免费播放| 亚洲电影免费在线| 国产精品午夜久久| 欧美黄色免费网站| 久久精品国产69国产精品亚洲| 欧美激情麻豆| 久久精品一区二区| 亚洲色图在线视频| 在线欧美电影| 国产麻豆91精品| 欧美福利视频一区| 久久久久久久久久看片| 99这里有精品| 亚洲第一页中文字幕| 欧美在线播放一区| 中国亚洲黄色| 亚洲精品一区二区网址| 国内久久婷婷综合| 国产精品久久久久久久久久ktv| 久热国产精品视频| 亚洲欧美一区二区精品久久久| 亚洲国产另类 国产精品国产免费| 欧美中在线观看| 亚洲在线播放| 一本久道综合久久精品| 亚洲国产岛国毛片在线| 国产亚洲欧美日韩日本| 国产精品美女久久久久av超清 | 久久久久九九九九| 亚洲一区二区三区免费观看 | 亚洲精品影院| 欧美成人一区二区三区| 久久久视频精品| 午夜在线精品偷拍| 亚洲免费视频在线观看| 亚洲资源在线观看| 亚洲无毛电影| 亚洲午夜未删减在线观看| 99亚洲伊人久久精品影院红桃| 亚洲高清成人| 91久久在线| 亚洲日韩欧美视频| 亚洲精品黄色| 亚洲最新中文字幕| 一区二区激情小说| 亚洲网站在线观看| 亚洲一区二区三区在线看| 亚洲视频免费| 亚洲在线视频| 久久精品国产免费看久久精品| 亚洲欧美日韩一区二区三区在线| 午夜国产精品视频| 欧美一区在线直播| 久久久最新网址| 欧美国产日韩精品| 亚洲人成在线观看| 中日韩美女免费视频网站在线观看| 99视频精品在线| 亚洲综合视频网| 欧美专区在线| 美日韩精品免费| 欧美日本乱大交xxxxx| 欧美日韩黄色大片| 国产麻豆午夜三级精品| 国内自拍视频一区二区三区| 亚洲电影免费观看高清| 一区二区三区av| 销魂美女一区二区三区视频在线| 久久成人亚洲| 欧美成人免费网| 亚洲精品女av网站| 99精品热视频| 久久久成人网| 欧美精品一区二区三区久久久竹菊 | 欧美 日韩 国产在线 | 午夜在线观看欧美| 你懂的国产精品永久在线| 亚洲国产精品一区| 午夜精品久久久久| 米奇777在线欧美播放| 国产精品高潮呻吟视频| 在线免费观看欧美| 亚洲一本视频| 蜜臀91精品一区二区三区| 99视频精品| 欧美成人一品| 国产香蕉97碰碰久久人人| 亚洲精品国产精品久久清纯直播 | 亚洲免费小视频| 免费一区视频| 亚洲一区欧美| 欧美日韩国产区| 亚洲国产成人精品视频| 欧美影院成年免费版| 最近看过的日韩成人| 久久久久网站| 国产午夜一区二区三区|