好久没写博客了,工作上的事情很忙,差点把写博客的好习惯给丢了,好了切入正题吧。
近段时间被高级的东西迷花了眼,net ,java,python 什么的,忘记了自己在干嘛了,机械的Coding中,当然这里并不是说这些东西不好,只是在使用它们提供的便利时候,少了许多为什么。
C语言的文件读写涉及以下需要用到的库函数和数据结构:
FILE 一个与操作系统物理文件相关联的结构体,是读写文件的前提
fput(int c,FILE *f) 写入一个字符到磁盘
fputs(char *str,FILE *f) 写入一个字符数组到磁盘
fgetc(int c,FILE *f) 从磁盘读取一个字符
fgets(char *buf,FILE *f) 从磁盘读入一个字符数组
fopen(FILE *f,const char *mode) 打开一个物理文件与一个FILE的关联
fclose(FILE *f,const char *mode)关闭一个物理文件与一个FILE的关联
这里的mode是读写模式,它决定以什么模式来操作文件
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
这里仅仅是基本的文件读写需要的函数和数据结构,并非所有的。
创建一个文本文件并写入数据
int main(int argc, _TCHAR* argv[])
{
char filestr[256]="d:\\1.txt"; //创建的文件路径
FILE *wfile; //文件结构体指针
wfile=fopen(filestr,"w+"); //以写方式创建一个文本文件
if(!wfile){
printf("文件创建失败");
return 1;
}
fputs("Hello,C",wfile); //写入一段字符到文件
fclose(wfile); //关闭文件
return 0;
}
读取文本文件数据
int main(int argc, _TCHAR* argv[])
{
char filestr[256]="d:\\1.txt"; //待读取的文件路径
FILE *rfile; //文件结构体指针
rfile=fopen(filestr,"r"); //以读方式创建一个文本文件
if(!rfile){
printf("文件创建失败");
return 1;
}
char buf[1024];//字符缓冲区
while(!feof(rfile))
{
fgets(buf,1024,rfile);
printf("%s\n",buf);
}
fclose(rfile); //关闭文件
system("pause");//屏幕暂停
return 0;
}
二进制文件的读写与文本文件基本一致
//二进制文件复制
int CopyFile(char *src,char *add)
{
FILE *src_file=NULL;
FILE *add_file=NULL;
src_file=fopen(src,"rb"); //打开待复制的二进制文件
add_file=fopen(add,"wb+"); //创建复制目标文件
if(!src_file)
{
printf("待复制的二进制文件打开失败!");
return 1;
}
if(!add_file)
{
printf("创建复制目标文件失败!");
return 2;
}
char buf[1024]; //建立缓冲区
while(!feof(src_file))
{
fread(buf,1024,1,src_file);
fwrite(buf,1024,1,add_file);
}
fclose(src_file);
fclose(add_file);
}
用到了fread、fwrite函数忘记说了,百度一下 关键词:C fread fwrie就出来了
C++ 文件IO操作
//创建文本文件
void FileIO(string filepath)
{
ofstream ofile(filepath.c_str(),fstream::out);
if(!ofile)
{
cout<<"File Stream not valid"<<endl;
return;
}
ofile<<"File System Read/Write";
ofile.close();
ofile.clear();
}
//读取文本文件
void Readtxt(string filepath)
{
//创建ifstream 对象
ifstream ifile(filepath.c_str(),fstream::in);
if(!ifile)
{
cout<<"Read File not valid"<<endl;
return;
}
//缓冲区
char p[256];
while(!ifile.eof())
{
//获取一行数据
ifile.getline(p,256);
string line(p);
cout<<line<<endl;
}
//关闭文件(类似C语言中的fclose)
ifile.close();
ifile.clear();
}
//复制二进制文件
void CopyFiles(string srcfile,string addfile)
{
//创建ifstream对象读取文件
ifstream ifile(srcfile.c_str(),fstream::binary|fstream::in);
//创建ofstream对象写文件
ofstream ofile(addfile.c_str(),fstream::out|fstream::binary);
char buffer[1024]; //1k缓冲区
long len=0;
while(!ifile.eof())
{
len=ifile.read(buffer,1024).gcount();
ofile.write(buffer,len);
}
ifile.close();
ofile.close();
ifile.clear();
ofile.clear();
}