文件夹的操作和文件的操作有许多种方式,这一系列的文章将介绍C++对文件的操作,本篇blog介绍文件夹和文件的创建和删除,以及判断他们是否存在

如何创建一个文件夹?

1、 使用dos命令


int FileOperate::CreateFolderByDos(string strName)
{
string strFolder = "md ";
strFolder += strName;
return system(strFolder.c_str());
}

       这里要注意,文件夹的格式必须是 F:\\ 格式的,不要使用反斜杠 /否则创建失败

      2、 使用windows提供的API

int FileOperate::CreateFolderByAPI(string strName)
{
size_t size = strName.length();
wchar_t *buffer = new wchar_t[size+1];
MultiByteToWideChar( CP_ACP, 0, strName.c_str(), size, buffer, size * sizeof(wchar_t) );
buffer[size] = 0; // 确保以 '\0' 结尾
int tmp = CreateDirectory(buffer,0);
delete buffer;
return tmp;
}


    如何删除一个文件夹

    1、 使用DOS命令

int FileOperate::DelFolderByDos(string strName)
{
string strFolder = "rd ";
strFolder += strName;
return system(strFolder.c_str());
}

注意文件夹名称不要使用反斜杠

    2、 使用windowsAPI

bool FileOperate::DelFolderByAPI(string strName)
{
size_t size = strName.length();
wchar_t *buffer = new wchar_t[size+1];
MultiByteToWideChar( CP_ACP, 0, strName.c_str(), size, buffer, size * sizeof(wchar_t) );
buffer[size] = 0; // 确保以 '\0' 结尾
BOOL bResult = RemoveDirectory(buffer);
delete buffer;
if(bResult==TRUE)
{
return true;
}
return false;
}



      创建一个新文件

      1、 使用流式文件操作方法

bool FileOperate::CreateFileByFILE(string strName)
{
FILE* file = fopen(strName.c_str(),"wb");
if(NULL == file)
{
return false;
}
fclose(file);
return true;
}


      2、 使用I/O操作方法

bool FileOperate::CreateFileByIO(string strName)
{
int handle = open(strName.c_str(),O_RDWR|O_CREAT);
if(-1==handle)
{
return false;
}

close(handle);
return true;
}


     删除文件

    使用流式文件操作方法

int FileOperate::DeleteFileByFILE(string strName)
{
return remove(strName.c_str());
}


    判断一个文件夹是否存在

    使用PathIsDirectory 函数,引入头文件 

    

#include<Shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

    实例代码

bool FileOperate::IsFolderExist(string strName)
{
size_t size = strName.length();
wchar_t *buffer = new wchar_t[size+1];
MultiByteToWideChar( CP_ACP, 0, strName.c_str(), size, buffer, size * sizeof(wchar_t) );
buffer[size] = 0; // 确保以 '\0' 结尾
BOOL bExist = PathIsDirectory(buffer);
delete buffer;
return bExist==FALSE?false:true;
}

      判断一个文件是否存在

bool FileOperate::IsFileExist(string strName)
{
return (access(strName.c_str(), 0) == 0);
}