VC文件目录常见操作实例汇总
一般来说,在VC里文件操作有很多,本文在这里收录了一些常见的函数,分享给大家供大家参考。具体如下:
1. 判断一个目录是否存在
//参数: 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. 判断文件或目录是否存在
参数:文件或目录的完整名字(带路径),可以是文件名,也可以是目录名
返回值: 如果存在,返回真,否则返回假。
{
CFileFind fFind;
return fFind.FindFile(strFileName);
}
3. 创建一个目录
{
SECURITY_ATTRIBUTES attrib;
/*
设置目录的常见属性
*/
return ::CreateDirectory(strPath, &attrib);
}
4. 文件大小:
参数: 文件名字, 注意,如果给的是目录(文件夹),该函数返回值不会递归计算目录下所有文件大小。所以该函数只适 用于文件大小的统计。
返回值: 文件大小。单位为Byte。
{
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。
{
CString strFilePath;
int64 dwDirSize = 0;
strFilePath += strDirPath;
strFilePath += "//*.*";
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. 列出某目录下的所有文件(不递归列出)