一: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();