c/c++ 文件相关操作

打开文件(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);



按照目前来说,用到的文件操作就这么多,当程序趋向于完善时,可能还需要增加修改文件权限、删除文件、创建目录等功能。

猜你喜欢

转载自blog.csdn.net/Vis_Stu/article/details/74452306
今日推荐