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

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

搜索

  •  

積分與排名

  • 積分 - 1811724
  • 排名 - 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>
              欧美精品福利视频| 夜夜精品视频一区二区| 亚洲欧洲一区二区三区在线观看| 国产综合在线视频| 狠狠色综合播放一区二区| 国产网站欧美日韩免费精品在线观看| 国产日韩在线一区| 欧美日韩裸体免费视频| 欧美日韩午夜精品| 国产精品视频免费观看| 国模私拍一区二区三区| 在线欧美视频| 亚洲视频www| 久久久久久久综合| 亚洲欧洲精品一区二区三区不卡 | 狠狠色香婷婷久久亚洲精品| 国产一区二区av| 亚洲国产精品女人久久久| 日韩视频一区二区三区在线播放| 在线视频欧美一区| 久久久久综合网| 91久久国产自产拍夜夜嗨| 在线综合欧美| 欧美成人精品高清在线播放| 国产欧美日韩视频在线观看| 亚洲国产精品视频| 性做久久久久久久久| 另类春色校园亚洲| 在线视频欧美精品| 久久精品91久久久久久再现| 美女999久久久精品视频| 日韩视频免费| 久久久久久日产精品| 国产精品久久久久久户外露出 | 久久精品欧美日韩| 欧美理论电影在线播放| 国产日韩一区二区三区在线| 99国产成+人+综合+亚洲欧美| 久久精品二区| 亚洲视频久久| 欧美日韩亚洲高清| 亚洲精品在线一区二区| 久久精品视频在线看| 日韩午夜在线播放| 欧美成人中文字幕在线| 伊人久久大香线蕉综合热线 | 欧美国产日产韩国视频| 亚洲欧美在线免费| 欧美性猛交视频| 99精品国产一区二区青青牛奶| 麻豆精品传媒视频| 欧美在线观看视频一区二区三区 | 黄色在线一区| 久久久xxx| 香蕉久久一区二区不卡无毒影院 | 国产精品久久久久秋霞鲁丝| 一本色道久久综合亚洲精品小说| 亚洲欧洲一区| 欧美啪啪成人vr| 亚洲三级视频| 亚洲激情偷拍| 欧美日韩精选| 亚洲男人天堂2024| 亚洲综合精品自拍| 国产日韩欧美在线观看| 久久婷婷国产综合精品青草| 久久精品中文| 亚洲精品中文字幕有码专区| 99精品国产一区二区青青牛奶| 欧美日韩三级电影在线| 亚洲欧美日韩成人高清在线一区| 亚洲午夜精品久久| 国产伦精品一区二区三区免费迷 | 国产精品永久免费观看| 欧美一区二区三区视频免费播放| 午夜欧美理论片| 永久久久久久| 亚洲午夜精品在线| 91久久久亚洲精品| 欧美日韩国产精品自在自线| 一区二区三区免费在线观看| 一本久久a久久免费精品不卡| 国产精品视频yy9299一区| 久久九九电影| 欧美va天堂| 亚洲一区二区伦理| 午夜国产精品影院在线观看| 国内自拍视频一区二区三区| 亚洲黄一区二区| 欧美午夜寂寞影院| 久久婷婷国产综合精品青草| 欧美不卡在线视频| 午夜精品剧场| 久久深夜福利| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲精品久久久久久下一站| 国产精品一二一区| 欧美大片国产精品| 国产精品欧美日韩一区| 久久综合伊人77777麻豆| 欧美日韩国产黄| 久久综合给合久久狠狠狠97色69| 欧美精品一区三区| 久久久噜噜噜久久人人看| 欧美日韩精品一区视频| 免费永久网站黄欧美| 国产精品美女久久久久久2018 | 欧美中文字幕| 亚洲天堂av高清| 麻豆91精品| 久久精品1区| 欧美四级在线| 亚洲茄子视频| 亚洲七七久久综合桃花剧情介绍| 香蕉国产精品偷在线观看不卡| 亚洲视频免费在线观看| 欧美韩国日本综合| 欧美成人久久| 伊人婷婷久久| 久久米奇亚洲| 欧美成人有码| 亚洲国产另类精品专区| 久久亚洲精品网站| 久热精品在线视频| 伊人久久男人天堂| 久久久青草青青国产亚洲免观| 久久这里有精品视频| 精品成人国产| 久久久久一本一区二区青青蜜月| 久久成人综合网| 国产日本欧美视频| 午夜在线播放视频欧美| 久久成人精品视频| 国产欧美日本一区二区三区| 亚洲永久在线观看| 欧美一级视频免费在线观看| 国产精品一区久久久久| 亚洲一区二区高清| 欧美一区二区性| 国产日韩免费| 亚洲第一视频网站| 久久综合九色| 模特精品裸拍一区| 亚洲第一网站免费视频| 开心色5月久久精品| 蜜桃久久av| 亚洲黄色高清| 欧美屁股在线| 亚洲图片你懂的| 久久精品欧洲| 亚洲第一偷拍| 欧美大片在线观看一区| 亚洲三级视频| 欧美永久精品| 亚洲电影在线免费观看| 欧美国产三区| 日韩视频欧美视频| 亚洲综合色在线| 国产欧美一区二区三区沐欲| 久久久精品动漫| 亚洲美女诱惑| 国产精品av免费在线观看| 亚洲综合色噜噜狠狠| 久久精品99国产精品| 亚洲高清二区| 国产精品swag| 久久久久高清| 一本色道88久久加勒比精品| 久久欧美中文字幕| 洋洋av久久久久久久一区| 国产乱理伦片在线观看夜一区| 久久免费99精品久久久久久| 99riav1国产精品视频| 久久亚洲电影| 亚洲午夜小视频| 亚洲高清毛片| 国产欧美精品xxxx另类| 欧美精品一区二区三区很污很色的| 亚洲欧美变态国产另类| 亚洲黄色一区二区三区| 久久精品国产清高在天天线| 亚洲视频播放| 亚洲理伦电影| 亚洲第一精品电影| 国产亚洲视频在线| 欧美婷婷六月丁香综合色| 久久久久久久综合日本| 亚洲一级影院| 日韩视频在线一区| 亚洲国产成人一区| 蜜桃av综合| 久久久久久久久久久成人| 亚洲欧美韩国| 一区二区三区高清在线观看| 91久久精品日日躁夜夜躁欧美| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧洲日产国产网站| 国产欧美另类| 午夜精品视频在线| 中日韩美女免费视频网址在线观看 |