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

C++ Programmer's Cookbook

{C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

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);  回復(fù)  更多評論   

# re: c++ file and directory 2006-01-12 16:39 夢在天涯

也可以用searchpath()來找,是嗎?可惜就是沒有找到例子!
那位有的話,貢獻(xiàn)一下啊,謝謝!  回復(fù)  更多評論   

# re: c++ file and directory 2006-02-09 16:49 夢在天涯

-------------------------------------------------------------------
、獲得當(dāng)前應(yīng)用程序路徑
#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理了。  回復(fù)  更多評論   

# 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
}   回復(fù)  更多評論   

公告

EMail:itech001#126.com

導(dǎo)航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1811750
  • 排名 - 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>
              在线视频一区二区| 性色av一区二区三区| 久久综合精品国产一区二区三区| 亚洲曰本av电影| 国产欧美在线| 另类天堂视频在线观看| 免播放器亚洲一区| 日韩视频免费观看高清在线视频| 亚洲激情综合| 欧美高清一区| 亚洲欧美国产视频| 欧美在线观看日本一区| 伊人久久亚洲影院| 亚洲人成免费| 国产精品久久激情| 久久综合狠狠| 欧美日本免费一区二区三区| 亚洲欧美在线x视频| 欧美一级夜夜爽| 亚洲激情婷婷| 亚洲网站啪啪| 亚洲第一精品影视| 一区二区三区www| 国模吧视频一区| 亚洲精品中文字幕女同| 国产亚洲二区| 亚洲区欧美区| 国内精品久久久久久久影视蜜臀 | 国产精品yjizz| 久久免费偷拍视频| 欧美手机在线视频| 美女黄毛**国产精品啪啪| 欧美日韩一区二区国产| 久久久免费精品| 欧美午夜一区二区三区免费大片| 久久久五月天| 国产精品老女人精品视频| 免费人成网站在线观看欧美高清| 欧美日韩免费一区二区三区| 可以免费看不卡的av网站| 欧美视频一区二区| 欧美大片第1页| 国产亚洲a∨片在线观看| 亚洲另类自拍| 亚洲精选一区二区| 久久这里只有| 久久精品视频播放| 国产精品美女久久久久av超清| 欧美激情精品久久久| 国产一区在线视频| 亚洲伊人伊色伊影伊综合网| 在线视频欧美日韩精品| 狼狼综合久久久久综合网| 久久精品国产v日韩v亚洲 | 午夜一区二区三区不卡视频| 国产精品99久久久久久久久久久久 | 可以看av的网站久久看| 国产精品久久一卡二卡| 亚洲毛片av在线| 亚洲精品国精品久久99热一| 久久综合狠狠综合久久综合88| 午夜在线a亚洲v天堂网2018| 国产精品成人在线观看| 一本久道久久久| 亚洲一区二区综合| 欧美视频观看一区| 一区二区三区成人精品| 亚洲一区二区动漫| 国产精品99一区二区| 夜夜嗨av一区二区三区网页| 亚洲一区二区在线看| 国产精品激情偷乱一区二区∴| 一区二区三区国产| 午夜精品999| 国产日产欧产精品推荐色 | 亚洲麻豆国产自偷在线| 亚洲视频一区二区在线观看| 欧美日韩国产999| a91a精品视频在线观看| 亚洲一区亚洲二区| 国产伦精品一区二区三区四区免费| 亚洲欧美日韩精品久久久| 欧美在线黄色| 在线观看不卡| 欧美精品一区二区三区在线播放| 一本一本久久a久久精品综合麻豆| 亚洲一区二区免费在线| 国产人妖伪娘一区91| 久久手机免费观看| 亚洲另类自拍| 久久久999| 亚洲剧情一区二区| 国产精品国产三级国产aⅴ无密码| 午夜精品电影| 亚洲第一搞黄网站| 亚洲欧美精品一区| 在线成人激情视频| 欧美午夜a级限制福利片| 西西人体一区二区| 亚洲激情网站| 久久精品综合| 一区二区三区免费网站| 国产一区深夜福利| 欧美日韩国产精品自在自线| 欧美一区二区三区另类| 亚洲国产精品久久人人爱蜜臀| 午夜一区在线| 日韩午夜激情电影| 国产日本亚洲高清| 欧美啪啪一区| 久久精品国产清自在天天线| 一区二区欧美国产| 欧美成人精品福利| 久久国产精品电影| 一个色综合导航| ●精品国产综合乱码久久久久 | 亚洲专区免费| 亚洲伦理在线| 欧美激情精品久久久久久变态| 久久av免费一区| 亚洲天堂av电影| 亚洲精品欧美日韩专区| 极品尤物一区二区三区| 国产美女一区二区| 欧美日韩亚洲精品内裤| 免费成人毛片| 久久青青草原一区二区| 欧美一区二区高清| 亚洲午夜免费福利视频| 亚洲精品在线看| 最新成人av在线| 欧美成人精品一区二区三区| 久久影院午夜片一区| 欧美一区二区三区免费观看| 亚洲免费一级电影| 亚洲视频一二| 一区二区三区高清视频在线观看 | 欧美日韩一区二区三区高清| 蜜桃av综合| 狼人社综合社区| 久久综合亚州| 免费欧美在线| 欧美1级日本1级| 欧美成人高清| 欧美精品久久久久a| 欧美国产三区| 欧美日韩国产成人在线91| 你懂的亚洲视频| 欧美国产专区| 欧美特黄一区| 国产精品任我爽爆在线播放 | 欧美韩日精品| 欧美日韩国产色综合一二三四 | 午夜精品电影| 久久久久国产精品厨房| 久久人人看视频| 蜜桃久久精品乱码一区二区| 欧美福利视频在线观看| 欧美激情区在线播放| 欧美色播在线播放| 国产精品丝袜91| 精品91视频| 99pao成人国产永久免费视频| 中文欧美在线视频| 久久不射中文字幕| 欧美福利专区| 99国产精品久久久久老师| 亚洲综合精品一区二区| 久久国产视频网站| 欧美成人乱码一区二区三区| 欧美日韩国产一区精品一区| 国产乱码精品| 亚洲精品国产欧美| 午夜精品av| 欧美激情女人20p| 亚洲午夜精品网| 久久视频一区二区| 国产精品a久久久久| 国产在线乱码一区二区三区| 亚洲日本一区二区三区| 午夜精品美女自拍福到在线| 欧美成人免费在线观看| 99精品国产在热久久下载| 久久精品国产亚洲高清剧情介绍| 欧美 日韩 国产 一区| 国产精品美女主播| 亚洲国产一区二区视频| 欧美一站二站| 亚洲人成高清| 久久尤物视频| 国产欧美精品在线| 一区二区三区国产盗摄| 嫩草国产精品入口| 亚洲欧美中文日韩在线| 欧美福利电影在线观看| 在线看视频不卡| 欧美在线观看一二区| aa级大片欧美三级| 欧美成人黑人xx视频免费观看| 国产一区日韩二区欧美三区|