亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

VC文件目錄常見操作實例匯總

2020-01-26 15:12:59
字體:
來源:轉載
供稿:網友

一般來說,在VC里文件操作有很多,本文在這里收錄了一些常見的函數,分享給大家供大家參考。具體如下:

1. 判斷一個目錄是否存在

復制代碼 代碼如下:
#include "windows.h"

 //參數: strPath: 目錄的完整路徑,注意不要以'/'結尾

 //返回值: 如果為目錄,返回真,否則返回假

  BOOL FolderExist(CString strPath)
 {
    WIN32_FIND_DATA wfd;
    BOOL rValue = FALSE;
    HANDLE hFind = FindFirstFile(strPath, &wfd);
    if ((hFind!=INVALID_HANDLE_VALUE) &&
         (wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
    {
        rValue = TRUE;
    }
    FindClose(hFind);
    return rValue;
 }

2. 判斷文件或目錄是否存在

參數:文件或目錄的完整名字(帶路徑),可以是文件名,也可以是目錄名

返回值: 如果存在,返回真,否則返回假。

復制代碼 代碼如下:
BOOL  FileExist(CString strFileName)
{
    CFileFind fFind;
    return fFind.FindFile(strFileName);
}

3. 創建一個目錄

復制代碼 代碼如下:
BOOL CreateFolder(CString strPath)
{
    SECURITY_ATTRIBUTES attrib;
   /*

     設置目錄的常見屬性

     */
    return ::CreateDirectory(strPath, &attrib);
}

4. 文件大?。?/strong>

參數: 文件名字, 注意,如果給的是目錄(文件夾),該函數返回值不會遞歸計算目錄下所有文件大小。所以該函數只適           用于文件大小的統計。

返回值: 文件大小。單位為Byte。

復制代碼 代碼如下:
DWORD GetFileSize(CString filepath)
{
    WIN32_FIND_DATA fileInfo;
    HANDLE hFind;
    DWORD fileSize;
    CString filename;
    filename = filepath;
    hFind = FindFirstFile(filename,&fileInfo);
    if(hFind != INVALID_HANDLE_VALUE)
        fileSize = fileInfo.nFileSizeLow;
   
    FindClose(hFind);
    return fileSize ;
}

5. 計算文件夾的大小

參數:文件夾的完整路徑。該函數不使用與文件

返回值: 文件夾的大小,單位為byte。

復制代碼 代碼如下:
int64 GetFolderSize(CString strDirPath)
{

    CString strFilePath;

    int64    dwDirSize = 0;
    strFilePath += strDirPath;
    strFilePath += "http://*.*";
    CFileFind finder;
    BOOL bFind = finder.FindFile(strFilePath);
    while (bFind)
    {
        bFind = finder.FindNextFile();
        if (!finder.IsDots())
        {
            CString strTempPath = finder.GetFilePath();
            if (!finder.IsDirectory())
            {
                dwDirSize += finder.GetLength();
            }
            else
            {
                dwDirSize += GetDirSize(strTempPath);
            }
        }
    }
    finder.Close();
    return dwDirSize;
}

由于該函數涉及到遞歸調用,因此如果是超大大的文件夾,或者文件夾下的子文件夾特別多,

則很有可能造成堆棧溢出。本人測試過系統目錄D和E,均沒有發生溢出。因此在一般情況下

可以使用。由于返回值為int64,int64表示的磁盤空間是相當大的,也沒有溢出的可能。

6. 列出某目錄下的所有文件(不遞歸列出)

復制代碼 代碼如下:
  #include <Windows.h>
  #include <tchar.h>
  #include <list>
  #include <set>
  #include <cassert>
  #include <string>
  typedef std::basic_string<TCHAR> _tstring;  //寬字符串
  typedef std::list<_tstring> _tslist; //字符串鏈表
 /*

  返回文件名的鏈表。

  filepath  目錄的完整路徑,不帶//

  filefilterlist 文件擴展名列表,可以是多種類型的組合,比如說.txt;.xls;.doc

  isordered  是否對文件名排序 

 */

_tslist  SearchFile(LPCTSTR filepath, LPCTSTR filefilterlist = _T(".*" ), bool isordered = true)

{

    assert(filepath != NULL);  

    TCHAR buffer[MAX_PATH];

#if _MSC_VER > 1310 

/* 1310 for Microsoft Visual C++ .NET 2003. 1310 represents /version 13 and a 1.0 point          release. The Visual C++ 2005 compiler version is 1400, the number.

*/

    _tcscpy_s(buffer, filepath); //_tcscpy_s is a micro for strcpy_s and strwcpy_s 

#else

    _tcscpy(buffer,filepath);  //

#endif

    _tslist filenamelist; // initial length is 100

    WIN32_FIND_DATA finddata;

    HANDLE searchhandle = INVALID_HANDLE_VALUE;

    size_t length= _tcslen(filepath);

    if (buffer[length-1] != _T('//'))
   {

        _tcscat_s(buffer,_T("http://*")); // 向字符串結尾添加/*, 用來查找所有文件
    }
    if ( (searchhandle = ::FindFirstFile(buffer, &finddata)) != INVALID_HANDLE_VALUE )
    {

      while (::FindNextFile(searchhandle, &finddata) != 0)
     {

        if ( !(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )   // 為文件            
       {
          if (  !_tcsicmp(filefilterlist, _T(".*")))   // 將所有文件輸出到鏈表

             filenamelist.push_back(finddata.cFileName);
          else
         {
            //get file filter list string, a example, file filter may be ".txt;.xls;.doc"
            _tstring filterstring = filefilterlist;
            _tstring filename(finddata.cFileName);
            _tstring::size_type index = filename.find_last_of(_T('.'));
            if (index == _tstring::npos) // 文件沒有擴展名,跳過
               continue;
            else
           {
                 _tstring extname = filename.substr(index+1);  //取得文件的擴展名
                _tstring::size_type exist;
                exist = filterstring.find(extname);
                if (exist != _tstring::npos)  //判斷文件的擴展名是否在擴展名列表里
                 filenamelist.push_back(finddata.cFileName);
              }
            }
         }
      }
    }
    ::FindClose( searchhandle );

    if (isordered)  //如果要求排序,對鏈表進行排序
    {
        filenamelist.sort();  //list的排序采用的一般是merge sort
     }
    return filenamelist;
}

  測試代碼如下:

復制代碼 代碼如下:
  LPCTSTR s = _T("C://temp");
  LPCTSTR s1 = _T(".txt; .xls");
  _tslist filename = SearchFile(s,s1);

  copy( filename.begin(),
            filename.end(),
            ostream_iterator<_tstring, _tstring::value_type >(wcout, _T("/n") )
          );

由于函數返回的是list,因此有筆不菲的拷貝開銷。個人也不確定RVO(返回值)是否會被執行,所以如果list很大很大的話,這確實是很糟糕的。解決方法是把list作為引用參數傳進去。這樣就省了一次拷貝的開銷。

復制代碼 代碼如下:
void SearchFile(_tslist& list, LPCTSTR filepath, LPCTSTR filefilterlist = _T(".*" ), bool isordered = true)

以上代碼均通過visual studio 2008編譯,測試運行。

感興趣的朋友可以測試運行一下本文實例以加深理解。希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品在线| 亚洲欧洲国产伦综合| 欧美精品一本久久男人的天堂| 成人写真视频福利网| 亚洲美女在线看| 欧美精品videofree1080p| 5278欧美一区二区三区| 亚洲视频在线观看网站| 精品久久久视频| 伊人一区二区三区久久精品| 91大神在线播放精品| 亚洲成**性毛茸茸| 国产成人亚洲精品| 日韩av网站导航| 亚洲人成免费电影| 日韩av在线免费观看| 欧美一区二区三区免费视| 18性欧美xxxⅹ性满足| 6080yy精品一区二区三区| 日韩在线视频观看正片免费网站| 国产日韩欧美一二三区| 国产成+人+综合+亚洲欧美丁香花| 精品少妇一区二区30p| 久久偷看各类女兵18女厕嘘嘘| 国产不卡精品视男人的天堂| 97**国产露脸精品国产| 日韩av中文字幕在线免费观看| 久久色精品视频| 中文国产成人精品久久一| 色偷偷91综合久久噜噜| 成人黄色av播放免费| 久久精品99久久香蕉国产色戒| 国产婷婷色综合av蜜臀av| 日韩av免费在线| 日韩成人在线视频| 主播福利视频一区| 欧美性xxxx| 午夜精品视频在线| 欧美重口另类videos人妖| 亚洲欧美中文字幕在线一区| 国产精品嫩草视频| 综合国产在线视频| 91视频-88av| 国产精品久久久久久久久久三级| 911国产网站尤物在线观看| 日本欧美一级片| 中文字幕无线精品亚洲乱码一区| 亚洲第一av网站| 97香蕉久久超级碰碰高清版| 亚洲国产精彩中文乱码av在线播放| 91久久精品国产| 欧美在线视频一区二区| 国产精品福利在线观看| 91香蕉嫩草神马影院在线观看| 伊人伊成久久人综合网站| 亚洲视频欧洲视频| 欧美性猛交xxxxx水多| 久久久久免费精品国产| 日韩精品中文字幕久久臀| 视频一区视频二区国产精品| 久久国产精品偷| 中文字幕精品网| 欧美—级a级欧美特级ar全黄| 日本免费久久高清视频| www.国产精品一二区| 中文字幕免费精品一区高清| 国产精品免费在线免费| 亚洲高清av在线| 欧美日韩国产精品一区二区三区四区| 日韩福利在线播放| 在线色欧美三级视频| 国产91亚洲精品| 欧美激情videoshd| www.久久撸.com| 亚洲欧美日韩高清| 久久久爽爽爽美女图片| 福利精品视频在线| 亚洲在线视频福利| 精品国内自产拍在线观看| 亚洲va欧美va国产综合久久| 欧洲精品久久久| 亚洲成人精品久久久| 亚洲欧美激情另类校园| 久久天堂av综合合色| 亚洲男人天堂手机在线| 亚洲影院污污.| 深夜福利一区二区| 91精品视频在线播放| 欧美日韩国产色视频| 精品中文字幕久久久久久| 日韩av影视在线| 亚洲成人久久久| 欧美高清视频在线观看| 久久久久久亚洲精品不卡| 黄色成人av在线| 色偷偷亚洲男人天堂| 国产69久久精品成人| 成人乱人伦精品视频在线观看| 亚洲精品中文字幕女同| 欧美乱妇高清无乱码| 久久亚洲一区二区三区四区五区高| 欧美一级bbbbb性bbbb喷潮片| 欧美电影免费观看高清完整| 国产一区二区三区在线免费观看| 亚洲精品久久在线| 亚洲一区二区三区香蕉| 亚洲第一综合天堂另类专| 欧美精品videosex极品1| 欧美精品成人在线| 久久免费视频观看| 久久久久久久久久久久久久久久久久av| 日韩最新免费不卡| 最近中文字幕mv在线一区二区三区四区| 国产精品扒开腿做| 亚洲国产精品电影| 精品成人在线视频| 久久久国产一区二区三区| 欧美一区视频在线| 成人午夜黄色影院| 欧美成人免费大片| 亚洲欧美国产精品va在线观看| 理论片在线不卡免费观看| 欧美另类在线播放| 欧美福利视频在线观看| 91精品在线国产| 亚洲国产另类 国产精品国产免费| 国产精品一区二区久久国产| 日韩最新中文字幕电影免费看| 91成人免费观看网站| 久久久久久美女| 色综合男人天堂| 92裸体在线视频网站| 日韩av在线网页| 国产福利成人在线| 在线亚洲国产精品网| 日韩在线观看成人| 亚洲一区二区三区sesese| 久久久精品国产| 亚洲色图在线观看| 国产女人精品视频| 国产精品一久久香蕉国产线看观看| 欧美成人免费全部观看天天性色| 久久国产精品久久久久| 色综合天天狠天天透天天伊人| 亚洲无限乱码一二三四麻| 精品国产31久久久久久| 国产97在线|亚洲| 最近的2019中文字幕免费一页| 亚洲视频第一页| 国产成人97精品免费看片| 国产做受69高潮| 成人www视频在线观看| 欧美精品电影在线| 在线国产精品播放| 亚洲国产精品va在看黑人| 亚洲天堂日韩电影| 欧美二区在线播放| 国产视频精品在线| 日韩在线观看网站| 国产精品一区二区三区在线播放| 国产在线视频91| 亚洲国产成人精品电影| 国产福利成人在线| 久久亚洲一区二区三区四区五区高|