C++ FILE 读写文件(未完)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Simon798/article/details/102590033

FILE 类结构:

	struct _iobuf {
	        char *_ptr;				// 文件输入的下一个位置
	        int   _cnt;				// 当前缓冲区位置
	        char *_base;			// 文件起始位置
	        int   _flag;			// 文件标志
	        int   _file;			// 文件有效性验证
	        int   _charbuf;			// 当前缓冲区状况
	        int   _bufsiz;			// 缓冲区大小
	        char *_tmpfname;		// 临时文件名
	        };
	typedef struct _iobuf FILE;

打开文件

fopen() 、fopen_s():

	// 返回文件指针,打开失败返回 0。
	fopen(
		char *filename,				// 文件全路径
		char *mode					// 打开方式(r/w/a/r+/w+/a+/t/b) 参考网址:http://c.biancheng.net/view/2054.html
	);
	
	// 成功返回 0,失败返回错误码。
	fopen_s( 
	   FILE** pFile,				// 文件指针
	   const char *filename,		// 文件全路径
	   const char *mode 			// 打开方式(同上)
	);

读文件

fgets():

	// 成功返回缓冲区指针,失败返回 NULL。
	fgets( 
	   char *str,			// 接收文件内容的缓冲区指针
	   int n,				// 读取的字节数
	   FILE *stream 		// 文件对象指针
	);

读取 txt 中所有内容:

	// 每行最大长度不得超过 1024 字节
	FILE* f = fopen("Group.txt","r");
	char buf[1024];
	while(fgets(buf,1024,f)){
		cout << buf << endl;
	}

读取 txt 中的某一行:

	// 每行最大长度不得超过 1024 字节
	char* readLineChars(FILE* fp,int line){
		char buf[1024];
		for(int i=0;i<line;i++){
			fgets(buf,1024,fp);
			// 找到第 i 行
			if(i == line-1){
				// 去掉换行符
				if(buf[strlen(buf)-1] == '\n'){
					buf[strlen(buf)-1] = '\0';
				}
				// 移动文件指针到文件头
				fseek(fp,0L,SEEK_SET);
				return buf;
			}
		}
		return "error";
	}

获取 txt 行数:

	// 每行最大长度不得超过 1024 字节
	int getLineNum(FILE* fp){
		int result = 0;
		char buf_group[1024];
		while(fgets(buf_group,1024,fp)){
			result++;
		}
		// 移动文件指针到文件头
		fseek(fp,0L,SEEK_SET);
		return result;
	}

写文件

fputs():

	// 成功返回非负值,失败返回 EOF(-1)
	fputs(
		const char *str,		// 要写入的字符串
		FILE *stream			// 指向 FILE 对象的指针
	)

猜你喜欢

转载自blog.csdn.net/Simon798/article/details/102590033