今天遇到一个关于图片文件处理的问题,需要把已经保存的图片读取大小然后根据size判断是否需要把数据做二次处理,虽然的解决方案是在数据传下来的时候就进行判断,对数据进行处理,从而确保了图片的正常显示。但是,对于其中用到的FILE流我却不是很了解。
所以,这次针对FILE流,进行简单的了解,我通过代码来说明,。
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
#include <stdio.h>
#include <string>
using namespace std;
int main(){
FILE *fp;
fp = fopen("D:\\abc.txt", "w"); /*打开文件fopen(文件路径(包含文件名),操作类型);
FILE *fp;
fp = fopen("D:\\abc.txt", "w"); /*打开文件fopen(文件路径(包含文件名),操作类型);
操作类型:
r:只读、w:只写、rb:以二进制打开、wb:以二进制写文件、a:续写、ab:以二进制续写
r+:可读可写的打开一个文件、w+:可读可写的创建一个文件、a+:可读可写的追加方式打开一个文件、后加b的都是以二进制形式进行操作*/
string sFileContent("I'm abc.I want to be a better man!!"); /*这里是练习C++的string库所以头文件引用的是<string>*/
char* cFileContent =new char[50];
int stringLength = sFileContent.length(); //string类的求长度函数
cout<<"stringLength:"<<stringLength<<endl;
cout<<"sFileContent:"<<sFileContent<<endl;
memcpy(cFileContent,sFileContent.c_str(),stringLength); //将string类型转化成char型
//cFileContent[stringLength] = '/0'; /*学习时,书上说c_str转化的字符串没有结束符,所以想增加结束符*/
//cFileContent[stringLength+1] = '/0';
cout<<"cFileContent:"<<cFileContent<<endl;
fwrite(cFileContent,sizeof(char),stringLength+1,fp); //将内容写进函数中
string sFileContent("I'm abc.I want to be a better man!!"); /*这里是练习C++的string库所以头文件引用的是<string>*/
char* cFileContent =new char[50];
int stringLength = sFileContent.length(); //string类的求长度函数
cout<<"stringLength:"<<stringLength<<endl;
cout<<"sFileContent:"<<sFileContent<<endl;
memcpy(cFileContent,sFileContent.c_str(),stringLength); //将string类型转化成char型
//cFileContent[stringLength] = '/0'; /*学习时,书上说c_str转化的字符串没有结束符,所以想增加结束符*/
//cFileContent[stringLength+1] = '/0';
cout<<"cFileContent:"<<cFileContent<<endl;
fwrite(cFileContent,sizeof(char),stringLength+1,fp); //将内容写进函数中
/*fwrite(写入内容,单个数据的大小,数据的数量,文件指针)*/
fseek(fp,0,SEEK_END); //跳转到文件尾,/*fseek(文件指针,位移量,跳转位置);用来 移动文件流的读写位置。跳转位置的值可以为SEEK_SET——从文件起始位置+位移量的位置开始读写、SEEK_CUR——从当前位置+位移量的位置开始读写文件、SEEK_END——从文件的结尾处+位移量的位置开始读写文件*/
int fileSize = ftell(fp); //ftell(文件指针);函数用于返回当前文件指针的位置距离文件起始位置的相对偏移量。
cout<<fileSize<<endl;
fclose(fp); //关闭文件。记得有open必须有close函数,使用完不关闭可能丢失数据。
fseek(fp,0,SEEK_END); //跳转到文件尾,/*fseek(文件指针,位移量,跳转位置);用来 移动文件流的读写位置。跳转位置的值可以为SEEK_SET——从文件起始位置+位移量的位置开始读写、SEEK_CUR——从当前位置+位移量的位置开始读写文件、SEEK_END——从文件的结尾处+位移量的位置开始读写文件*/
int fileSize = ftell(fp); //ftell(文件指针);函数用于返回当前文件指针的位置距离文件起始位置的相对偏移量。
cout<<fileSize<<endl;
fclose(fp); //关闭文件。记得有open必须有close函数,使用完不关闭可能丢失数据。
fp = fopen("D:\\abc.txt", "r");
if(fp == NULL){
system("pause");
return 0;
}
char buffer[50];
memset(buffer, 0x00,sizeof(buffer));
fread(buffer,sizeof(char),50,fp); /*fread(接收指针,单个数据大小,数据量count,文件指针);读取文件中count个数据。*/
cout<<buffer<<endl;
fclose(fp);
system("pause");
return 0;
}
if(fp == NULL){
system("pause");
return 0;
}
char buffer[50];
memset(buffer, 0x00,sizeof(buffer));
fread(buffer,sizeof(char),50,fp); /*fread(接收指针,单个数据大小,数据量count,文件指针);读取文件中count个数据。*/
cout<<buffer<<endl;
fclose(fp);
system("pause");
return 0;
}