c++文件及文件夹操作(一)
原创
©著作权归作者所有:来自51CTO博客作者wx63d78546a4969的原创作品,请联系作者获取转载授权,否则将追究法律责任
文件夹的操作和文件的操作有许多种方式,这一系列的文章将介绍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);
}