龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

VC文件目录常见操作实例汇总

时间:2014-10-23 11:03来源:网络整理 作者:网络 点击:
分享到:
这篇文章主要介绍了VC文件目录常见操作实例汇总,总结了VC针对文件目录的各种常用操作,非常具有实用价值,需要的朋友可以参考下

一般来说,在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. 文件大小:

参数: 文件名字, 注意,如果给的是目录(文件夹),该函数返回值不会递归计算目录下所有文件大小。所以该函数只适           用于文件大小的统计。

返回值: 文件大小。单位为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 += "//*.*";
    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. 列出某目录下的所有文件(不递归列出)

精彩图集

赞助商链接