文件操作

一:C语言文件读写

文件使用方式

             意义

   “r”

   只读打开一个文本文件,只允许读数据

   “w”

   只写打开或建立一个文本文件,只允许写数据

   “a”

   追加打开一个文本文件,并在文件末尾写数据

   “rb”

   只读打开一个二进制文件,只允许读数据

   “wb”

   只写打开或建立一个二进制文件,只允许写数据

   “ab”

   追加打开一个二进制文件,并在文件末尾写数据

   “r+”

  读写打开一个文本文件,允许读和写

   “w+”

  读写打开或建立一个文本文件,允许读写

   “at+”

  读写打开一个文本文件,允许读,或在文件末追加数据

   “rb+”

  读写打开一个二进制文件,允许读和写

   “wb+”

  读写打开或建立一个二进制文件,允许读和写

   “ab+”

  读写打开一个二进制文件,允许读,或在文件末追加数据

 


写文件:
FILE *pFile=fopen("1.txt","w");
//参数2:以字节为单位项的大小
//参数3:要被写入的项的最大数目
fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile);
//移动文件指针到文件头,参数2是指针偏移字节数
//fseek(pFile,0,SEEK_SET);
//再在文件指针处(文件头处)写入数据
//fwrite("ftp:",1,strlen("ftp:"),pFile);
//刷新缓冲区数据
//fflush(pFile);
fclose(pFile);

读文件:
FILE *pFile=fopen("1.txt","r");
char ch[100];
//字符数组初始化为0
memset(ch,0,100);
fread(ch,1,100,pFile);
fclose(pFile);

如果不确定文件有多少字节,以下面这种方式读取:
FILE *pFile=fopen("1.txt","r");
char *pBuf;
//将文件指针移动到文件尾
fseek(pFile,0,SEEK_END);
//ftell()函数获取文件指针的位置索引,文件尾的索引即文件长度
int len=ftell(pFile);
//加1为了在最后加结束字符"\0"
pBuf=new char[len+1];
//文指针重新移动到文件头,读取数据从文件头开始
rewind(pFile);
fread(pBuf,1,len,pFile);
//字符末尾添加"\0"
pBuf[len]=0;
fclose(pFile);

关于文件的二进制问题,下面做一个示例:
将一个整数98341写入文件,在文件中显示为98341
如果这样写:
FILE *pFile=fopen("3.txt","w"); 
  int i=98341; 
fwrite(&i,4,1,pFile);
fclose(pFile);
结果出来是乱码。98431会转换为二进制形式存储,
再读取时,二进制又转换为ASC码的对应字符

FILE *pFile=fopen("3.txt","w"); 
  int i=98341; 
//可用itoa函数直接转换为字符串
//参数1:源数据;参数2:目的数据;参数3:十进制形式
//itoa(i,ch,10);

//将数拆分为5个单独的数,转换为ASC码
//数字0的ASC码为48,则1为1+48, 2为2+48,以此类推
  char ch[5];
ch[0]=9+48; 
  ch[1]=8+48; 
  ch[2]=3+48; 
  ch[3]=4+48; 
  ch[4]=1+48;
fwrite(ch,1,5,pFile);
fclose(pFile);


二:C++对文件的操作
包含头文件
#include <fstream.h>

写入:
ofstream ofs("4.txt");
ofs.write("http://www.sunxin.org",strlen("http://www.sunxin.org"));
ofs.close();

读取:
ifstream ifs("4.txt");
char ch[100];
memset(ch,0,100);
ifs.read(ch,100);
ifs.close();

三、WIN32 API对文件的操作
写入:
HANDLE hFile;
//创建可写入的文件
hFile=CreateFile("5.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwWrites;   //用来接收实际写入到文件的字节数
WriteFile(hFile,"http://www.sunxin.org",strlen("http://www.sunxin.org"),
&dwWrites,NULL);
CloseHandle(hFile);

读取:
HANDLE hFile;
//打开文件
hFile=CreateFile("5.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
//char ch[100];
DWORD dwReads;    //接收实际读到的字节数
ReadFile(hFile,ch,100,&dwReads,NULL);
//ch[dwReads]=0;
CloseHandle(hFile);
//MessageBox(ch);


四:MFC操作文件( 封装很多函数,功能强大 )
写入:
CFile file("6.txt",CFile::modeCreate | CFile::modeWrite);
file.Write("http://www.sunxin.org",strlen("http://www.sunxin.org"));
file.Close();

读取:
CFile file("6.txt",CFile::modeRead);
char *pBuf;    //用来接收读取的数据
DWORD dwFileLen;
//获得文件长度
dwFileLen=file.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file.Read(pBuf,dwFileLen);
file.Close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值