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

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

搜索

  •  

積分與排名

  • 積分 - 1814985
  • 排名 - 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>
              欧美大片免费久久精品三p | 99成人在线| 亚洲福利小视频| 国产一区二区电影在线观看| 国产精品尤物| 国模套图日韩精品一区二区| 国产区欧美区日韩区| 国产亚洲精品福利| 国产一区视频观看| 欲色影视综合吧| 日韩视频在线一区二区三区| 野花国产精品入口| 亚洲欧美国产精品va在线观看| 午夜精品久久久久久久蜜桃app | 国产精品成人一区| 国产日韩精品久久| 影音先锋亚洲精品| 日韩视频永久免费| 欧美影片第一页| 久久综合久久综合久久| 免费欧美日韩| 亚洲三级视频| 中文国产一区| 久久精品亚洲| 欧美色视频日本高清在线观看| 国产精品入口尤物| 亚洲第一中文字幕| 亚洲性感美女99在线| 欧美中文字幕视频在线观看| 欧美gay视频| 99日韩精品| 久久久蜜桃一区二区人| 欧美日韩亚洲高清一区二区| 国产综合av| 亚洲色图在线视频| 免费亚洲一区二区| 亚洲在线日韩| 欧美激情久久久| 欧美日韩91| 亚欧成人在线| 欧美视频中文字幕| 亚洲国产另类久久久精品极度| 亚洲无线视频| 欧美大片va欧美在线播放| 亚洲综合不卡| 欧美视频一区二区| 亚洲乱码视频| 美女精品在线观看| 亚洲一区三区视频在线观看| 久久综合色综合88| 国产亚洲成精品久久| 亚洲一区二区精品视频| 亚洲电影av在线| 久久久久久久久久久久久9999 | 欧美一级视频精品观看| 欧美日韩福利视频| 亚洲精品国产日韩| 久久综合九色99| 欧美尤物巨大精品爽| 国产精品午夜国产小视频| 一区二区三区欧美激情| 亚洲电影在线看| 老司机午夜精品视频在线观看| 国产一区二区三区在线观看精品| 亚洲午夜精品网| 亚洲最新在线| 国产精品草莓在线免费观看| 一区二区三区欧美亚洲| 最近中文字幕日韩精品| 久久伊伊香蕉| 亚洲国产高清一区| 欧美成人午夜激情视频| 免费的成人av| 夜夜嗨av色一区二区不卡| 91久久国产综合久久蜜月精品| 久久综合电影| 久久综合久久88| 亚洲精品在线视频| 亚洲九九九在线观看| 欧美91精品| 99在线|亚洲一区二区| 美脚丝袜一区二区三区在线观看 | 99国产精品视频免费观看| 亚洲二区在线视频| 欧美日本国产一区| 亚洲欧美日韩区| 欧美一区免费视频| 亚洲国产高清aⅴ视频| 亚洲国产毛片完整版| 欧美日韩裸体免费视频| 亚洲欧美综合| 久久久一区二区| 一区二区高清| 欧美一区二区视频免费观看| 中文一区二区| 极品尤物一区二区三区| 亚洲视频日本| 亚洲国产成人精品女人久久久| 亚洲精品久久| 国产日韩欧美中文| 亚洲大胆人体在线| 亚洲国内精品在线| 久久久综合网站| 亚洲影院免费观看| 狠狠色丁香婷婷综合影院| 亚洲一级免费视频| 欧美在线观看你懂的| 亚洲区第一页| 亚洲在线观看免费| 最新日韩中文字幕| 午夜一区二区三区在线观看 | 亚洲少妇自拍| 亚洲国产精品黑人久久久| 一区二区日韩伦理片| 亚洲成色精品| 亚洲欧美日韩区| 日韩一区二区免费高清| 欧美一区网站| 亚洲一级在线观看| 免费成人高清视频| 欧美在线网址| 国产精品99免费看| 欧美激情亚洲另类| 国内偷自视频区视频综合| 在线亚洲激情| 99热这里只有精品8| 久久色在线播放| 久久精品盗摄| 国产精品日韩欧美综合| 日韩午夜三级在线| 亚洲美女精品一区| 欧美xx视频| 免费亚洲一区二区| 红桃视频欧美| 久久精品视频亚洲| 久久阴道视频| 亚洲福利久久| 欧美成人午夜激情在线| 欧美高清视频一区二区三区在线观看| 国内自拍视频一区二区三区| 欧美亚洲尤物久久| 久久理论片午夜琪琪电影网| 国产欧美日韩专区发布| 性做久久久久久久免费看| 欧美一区不卡| 韩国在线一区| 榴莲视频成人在线观看| 亚洲高清毛片| 日韩一级黄色av| 欧美色区777第一页| 亚洲综合视频1区| 欧美精品在线一区| 欧美亚洲日本网站| 亚洲欧美国产日韩天堂区| 99pao成人国产永久免费视频| 一区二区久久久久久| 亚洲美女在线看| 亚洲一区二区三区高清| 99视频超级精品| 免费成人美女女| 亚洲第一成人在线| 亚洲午夜免费视频| 久久久久一本一区二区青青蜜月| 亚洲自拍偷拍一区| 欧美日韩中文字幕在线| 日韩一二三在线视频播| 国产一区二区三区直播精品电影| 久久久伊人欧美| 久久一区二区三区av| 国产综合视频在线观看| 久久久精品动漫| 日韩视频中文字幕| 亚洲一区亚洲二区| 国产精品久久久久久久久久妞妞 | 亚洲小视频在线| 久久精品五月婷婷| 精品成人免费| 免费看黄裸体一级大秀欧美| 蜜桃精品久久久久久久免费影院| 亚洲精品久久嫩草网站秘色 | 欧美视频网站| 一区二区欧美视频| 欧美在线播放一区| 激情久久影院| 欧美激情精品久久久久久| av不卡在线| 久久精品国产视频| 亚洲欧洲日本专区| 国产精品都在这里| 久久精品视频导航| 亚洲日本中文字幕| 老色鬼久久亚洲一区二区| 亚洲精选国产| 国产精品亚洲精品| 另类成人小视频在线| 日韩视频免费| 久久国产欧美日韩精品| 亚洲欧洲三级电影| 国产精品色网| 欧美日韩直播|