C++_VC文件目录常见操作实例汇总,一般来说,在VC里文件操作有
while (::FindNextFile(searchhandle, &finddata) != 0)
void SearchFile(_tslist& list, LPCTSTR filepath, LPCTSTR filefilterlist = _T(".*" ), bool isordered = true)
{} FindClose(hFind);
}
}
CFileFind fFind;
if ( (searchhandle = ::FindFirstFile(buffer, &finddata)) != INVALID_HANDLE_VALUE )
int64 dwDirSize = 0;
{
返回文件名的链表。
HANDLE hFind = FindFirstFile(strPath, &wfd);5. 计算文件夹的大小
CString strFilePath;
CString strTempPath = finder.GetFilePath();_tslist filename = SearchFile(s,s1);
WIN32_FIND_DATA finddata;
4. 文件大小:
else}
返回值: 文件夹的大小,单位为byte。
DWORD fileSize;DWORD GetFileSize(CString filepath)
{
#include <string>
return dwDirSize;
复制代码 代码如下:
#include <cassert>fileSize = fileInfo.nFileSizeLow;
}
HANDLE searchhandle = INVALID_HANDLE_VALUE;
//参数: strPath: 目录的完整路径,注意不要以'https://www.xp.cn/'结尾
BOOL FileExist(CString strFileName)
测试代码如下:
isordered 是否对文件名排序
可以使用。由于返回值为int64,int64表示的磁盘空间是相当大的,也没有溢出的可能。
rValue = TRUE;filenamelist.push_back(finddata.cFileName);
size_t length= _tcslen(filepath);
//返回值: 如果为目录,返回真,否则返回假
HANDLE hFind;#if _MSC_VER > 1310
} _tstring filterstring = filefilterlist;if(hFind != INVALID_HANDLE_VALUE)
_tslist filenamelist; // initial length is 100
} }返回值: 文件大小。单位为Byte。
if (!finder.IsDirectory())}
CFileFind finder;
TCHAR buffer[MAX_PATH];
WIN32_FIND_DATA fileInfo;{
if (isordered) //如果要求排序,对链表进行排序
BOOL bFind = finder.FindFile(strFilePath);
*/
::FindClose( searchhandle );filefilterlist 文件扩展名列表,可以是多种类型的组合,比如说.txt;.xls;.doc
返回值: 如果存在,返回真,否则返回假。
由于函数返回的是list,因此有笔不菲的拷贝开销。个人也不确定RVO(返回值)是否会被执行,所以如果list很大很大的话,这确实是很糟糕的。解决方法是把list作为引用参数传进去。这样就省了一次拷贝的开销。
bFind = finder.FindNextFile();_tstring::size_type exist;
由于该函数涉及到递归调用,因此如果是超大大的文件夹,或者文件夹下的子文件夹特别多,
exist = filterstring.find(extname);continue;
{
*/
{*/
BOOL FolderExist(CString strPath)
filename = filepath;
return filenamelist;
1. 判断一个目录是否存在
if (buffer[length-1] != _T('//'))
复制代码 代码如下:
参数:文件或目录的完整名字(带路径),可以是文件名,也可以是目录名
while (bFind)2. 判断文件或目录是否存在
}#include "windows.h"
finder.Close();filenamelist.push_back(finddata.cFileName);
if ((hFind!=INVALID_HANDLE_VALUE) &&
filepath 目录的完整路径,不带//
{(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
则很有可能造成堆栈溢出。本人测试过系统目录D和E,均没有发生溢出。因此在一般情况下
_tcscpy_s(buffer, filepath); //_tcscpy_s is a micro for strcpy_s and strwcpy_s
}LPCTSTR s1 = _T(".txt; .xls");
设置目录的常见属性
}{
复制代码 代码如下:
{ SECURITY_ATTRIBUTES attrib;}
strFilePath += "//*.*";
WIN32_FIND_DATA wfd;
_tslist SearchFile(LPCTSTR filepath, LPCTSTR filefilterlist = _T(".*" ), bool isordered = true)
LPCTSTR s = _T("C://temp");
参数:文件夹的完整路径。该函数不使用与文件
//get file filter list string, a example, file filter may be ".txt;.xls;.doc"#include <tchar.h>
}
3. 创建一个目录
if (exist != _tstring::npos) //判断文件的扩展名是否在扩展名列表里{
/* {
#include <Windows.h>
else
#else
#include <set>BOOL CreateFolder(CString strPath)
复制代码 代码如下:
dwDirSize += GetDirSize(strTempPath);}
copy( filename.begin(),
#include <list>
_tstring extname = filename.substr(index+1); //取得文件的扩展名
_tstring filename(finddata.cFileName);
复制代码 代码如下:
/* {hFind = FindFirstFile(filename,&fileInfo);
参数: 文件名字, 注意,如果给的是目录(文件夹),该函数返回值不会递归计算目录下所有文件大小。所以该函数只适 用于文件大小的统计。
typedef std::basic_string<TCHAR> _tstring; //宽字符串_tcscat_s(buffer,_T("//*")); // 向字符串结尾添加/*, 用来查找所有文件
{
);
#endif
return fileSize ;FindClose(hFind);
else
复制代码 代码如下:
{{
}
assert(filepath != NULL);
{复制代码 代码如下:
6. 列出某目录下的所有文件(不递归列出)
return fFind.FindFile(strFileName);if (index == _tstring::npos) // 文件没有扩展名,跳过
return ::CreateDirectory(strPath, &attrib);
if (!finder.IsDots())
strFilePath += strDirPath;
_tcscpy(buffer,filepath); //
以上代码均通过visual studio 2008编译,测试运行。
dwDirSize += finder.GetLength();_tstring::size_type index = filename.find_last_of(_T('.'));
filenamelist.sort(); //list的排序采用的一般是merge sort
ostream_iterator<_tstring, _tstring::value_type >(wcout, _T("/n") )
}
int64 GetFolderSize(CString strDirPath)
复制代码 代码如下:
if ( !_tcsicmp(filefilterlist, _T(".*"))) // 将所有文件输出到链表 return rValue;{ CString filename;
if ( !(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) // 为文件
}
{
/* 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.
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/cjj/7115.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
只需要在调用Ctrl+B编译后
时间:2021-01-13
-
OpenGL超级宝典visual studio
时间:2021-01-04
-
Directx11 教程(2) 基本的wi
时间:2021-01-04
-
LeetCode11ContainerWithMostWate
时间:2021-01-04
-
C语言简单IT之家速成
时间:2020-12-27
-
三分钟了解Activity工作流
时间:2020-12-27
-
编译器是如何实现32位整型
时间:2020-12-27
-
C++中lower_bound函数和upper
时间:2020-12-27
热门文章
-
LeetCode11ContainerWithMostWater(最大水容器)
时间:2021-01-04
-
C语言简单编程速成
时间:2020-12-23
-
都2020了,这五个最佳C++的IDE你还没用过?
时间:2020-12-23
-
C语言源程序文件的后缀是什么?
时间:2020-12-23
-
OpenGL超级宝典visual studio 2013开发环境配置
时间:2021-01-04
-
编译器是如何实现32位整型的常量整数除
时间:2020-12-27
-
libusbwin32学习笔记(二)
时间:2020-12-27
-
C语言简单IT之家速成
时间:2020-12-27
-
C语言和Python语言有什么区别呢?
时间:2020-12-24
-
C++对象模型之RTTI的实现原理
时间:2020-12-23
