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

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>
              久久久777| 久久成人人人人精品欧| 亚洲国产欧美另类丝袜| 久久米奇亚洲| 亚洲精品久久久久| 亚洲视频二区| 国产一区二区日韩精品| 欧美大片免费观看| 欧美欧美天天天天操| 午夜一区二区三区在线观看| 欧美在线一二三| 亚洲国产欧美精品| 亚洲调教视频在线观看| 国内伊人久久久久久网站视频 | 狠狠噜噜久久| 美女免费视频一区| 欧美日韩亚洲视频| 久久久久久夜精品精品免费| 欧美二区在线看| 欧美在线免费播放| 欧美激情精品久久久久久黑人| 亚洲一区二区三区乱码aⅴ| 欧美诱惑福利视频| 中文精品一区二区三区| 久久国内精品视频| 亚洲视频 欧洲视频| 久久亚洲春色中文字幕| 亚洲一区一卡| 欧美成人久久| 久久婷婷国产综合精品青草| 国产精品超碰97尤物18| 欧美成人免费在线视频| 国产日韩欧美一区二区三区在线观看 | 欧美大秀在线观看| 久久国产毛片| 欧美香蕉大胸在线视频观看| 欧美激情成人在线视频| 国产日韩亚洲| 亚洲一区免费在线观看| 宅男噜噜噜66一区二区| 玖玖玖国产精品| 久久国产免费| 国产精品一二三四| 一卡二卡3卡四卡高清精品视频| 亚洲国产精品尤物yw在线观看| 亚洲欧美日韩在线高清直播| 亚洲一区综合| 欧美三级在线视频| 日韩视频久久| 99精品99| 欧美日韩国产不卡| 亚洲毛片在线观看| 日韩午夜免费| 欧美华人在线视频| 亚洲精品乱码久久久久久黑人| 在线观看日产精品| 久久人91精品久久久久久不卡| 久久久欧美一区二区| 国产亚洲成av人在线观看导航| 午夜精品www| 久久久久久久高潮| 国内精品视频在线观看| 久久国产精品久久w女人spa| 久久免费国产精品| 伊人久久综合97精品| 久久夜色撩人精品| 亚洲国产成人久久综合一区| 99re6这里只有精品| 欧美日韩成人在线播放| aa成人免费视频| 亚洲综合精品四区| 国产欧美日韩另类视频免费观看| 午夜伦欧美伦电影理论片| 久久久夜色精品亚洲| 在线看一区二区| 欧美高清免费| 一个色综合av| 久久综合国产精品| 日韩午夜激情| 国产精品亚洲不卡a| 欧美中文在线观看| 亚洲国产精品va在线看黑人| 一本久久知道综合久久| 国产精品日韩电影| 久久精品日产第一区二区三区 | 久久激五月天综合精品| 亚洲成在人线av| 欧美日韩一区二区三区视频 | 亚洲一区二区三区视频| 美国成人直播| 在线亚洲欧美| 国内精品美女av在线播放| 欧美大片在线观看| 亚洲欧美日韩成人| 亚洲国产成人精品久久久国产成人一区| 99精品国产一区二区青青牛奶| 国产精品免费看| 玖玖在线精品| 亚洲欧美伊人| 91久久久国产精品| 久久精品综合一区| 亚洲无毛电影| 亚洲第一综合天堂另类专| 欧美色一级片| 美女图片一区二区| 午夜精品在线视频| 亚洲美女精品久久| 欧美成人午夜激情在线| 性视频1819p久久| 亚洲最新色图| 亚洲高清视频在线观看| 国产偷国产偷亚洲高清97cao| 欧美精品久久久久久| 久久久美女艺术照精彩视频福利播放| 99热这里只有成人精品国产| 欧美激情在线狂野欧美精品| 欧美中文字幕视频在线观看| 中文在线一区| 日韩亚洲成人av在线| 在线观看不卡| 国产一区二区精品在线观看| 国产精品v一区二区三区| 欧美韩国日本综合| 美女免费视频一区| 玖玖精品视频| 久久影音先锋| 久久久最新网址| 久久精品中文| 久久精品2019中文字幕| 亚洲欧美一区二区激情| 亚洲欧美激情精品一区二区| 一区二区三区精密机械公司| 亚洲精品欧美极品| 亚洲精品美女久久7777777| 亚洲国产小视频| 欧美国产一区二区在线观看| 欧美1区免费| 亚洲第一天堂av| 欧美激情中文不卡| 亚洲国产一成人久久精品| 亚洲国产成人av| 亚洲激情视频网| 亚洲美女性视频| 一区二区三区欧美成人| 亚洲一区二区动漫| 欧美有码在线视频| 久久久免费精品| 欧美va天堂| 欧美日韩在线不卡一区| 国产精品卡一卡二| 国产偷国产偷精品高清尤物| 国内一区二区在线视频观看| 亚洲国产黄色| 在线视频精品一区| 亚洲在线日韩| 久久精品一区二区| 欧美激情第3页| 夜夜嗨av色一区二区不卡| 亚洲综合色噜噜狠狠| 久久精品一区二区三区不卡牛牛| 久久综合影视| 欧美视频在线观看一区| 国产亚洲人成网站在线观看| 亚洲国产成人久久综合一区| 99在线|亚洲一区二区| 性伦欧美刺激片在线观看| 男男成人高潮片免费网站| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲自拍偷拍色片视频| 久久久久国产精品午夜一区| 欧美福利影院| 亚洲线精品一区二区三区八戒| 久久精品国产精品亚洲| 欧美精品一区二区视频| 国产午夜久久久久| 99re亚洲国产精品| 久久久久久**毛片大全| 亚洲日韩中文字幕在线播放| 香蕉免费一区二区三区在线观看 | 这里只有精品丝袜| 久久视频精品在线| 国产精品欧美日韩一区| 亚洲国产一二三| 久久gogo国模裸体人体| 亚洲激情婷婷| 久久久久久久网站| 国产欧美韩日| 一区二区欧美激情| 欧美激情精品久久久久久变态| 亚洲免费中文字幕| 欧美精品一级| 亚洲经典自拍| 久久欧美肥婆一二区| 亚洲一区二区成人| 欧美日本国产视频| 亚洲国产精品久久久久久女王| 久久激情婷婷| 亚洲一区二区日本| 欧美三日本三级少妇三2023| 亚洲美女免费视频|