打开文件(fopen函数):
包含头文件<stdio.h>即可。
使用比较简单方便,两个参数前者代表文件路径,后者代表打开方式('r'代表可读,'w'代表可写,‘b’代表二进制形式打开,'+'代表读写权限均有,可组合使用)。
如果打开失败,返回的文件指针为空。
只要含有'r'标志的打开方式,都会检测文件是否存在,若不存在则打开失败。如果是以'w'标志打开,当文件不存在时则进行新建。
当然还有ifstream和ofstream等方式。
FILE *pFile = fopen("c:\\test.txt", "rb+");
if(pFile == NULL)
{
return;
}
//....
fclose(pFile);
判断文件状态(GetFileAttributes函数)是否存在,或者是文件还是目录:
包含头文件<windows.h>即可。
INVALID_FILE_ATTRIBUTES代表文件不存在。
FILE_ATTRIBUTE_DIRECTORY代表当前路径为一目录。
返回的其他类型可以搜索GetFileAttributes函数进行查阅。
bool IsDirectoryExist(string strDirpath)
{
DWORD dwAttr = INVALID_FILE_ATTRIBUTES;
dwAttr = GetFileAttributes(strDirpath.c_str());
return (dwAttr != INVALID_FILE_ATTRIBUTES) && (dwAttr & FILE_ATTRIBUTE_DIRECTORY);
}
获取目录下文件(_findfirst函数):
包含头文件<io.h>即可。
需要使用类_finddata_t(用于存储文件相关信息)。
_findfirst函数获取目录下第一个文件信息,返回对应的文件指针。
然后用_findnext获取下一个文件信息,如果该函数返回为0,则代表无下一个文件信息。
最后需要用_findclose关闭文件句柄。
void GetFilesInDir(vector<string> &filepaths, string dirpath)
{
long hfile = 0;
_finddata_t fileinfo;
hfile = _findfirst((dirpath + "\\*").c_str(), &fileinfo);
if(hfile != -1)
{
while(true)
{
// 如果是目录,迭代寻找
if(fileinfo.attrib & _A_SUBDIR)
{
if(strcmp(fileinfo.name, ".") !=0 && strcmp(fileinfo.name, "..") != 0)
GetFilesInDir(filepaths, dirpath + "\\" + fileinfo.name);
}
else
{
filepaths.push_back(dirpath + "\\" + fileinfo.name);
}
if(_findnext(hfile, &fileinfo))
{
break;
}
}
_findclose(hfile);
}
}
文件输入输出操作(fgetc/fputc函数):
也是只要<stdio.h>头文件即可。
分为单个字符输入/输出和字符串输入/输出格式。
FILE *pFile = fopen(filepath, "ab+");
//读入到内存
//单个字符
int c;
c = fgetc(pFile);
//字符串
fscanf(pFile, "%s", strContent);
//输出到文件
//字符串
fprintf(pFile, "%s", "HelloWorld");
int c = 'A';
//单个字符
fputc(c, pFile);
按照目前来说,用到的文件操作就这么多,当程序趋向于完善时,可能还需要增加修改文件权限、删除文件、创建目录等功能。