http://wenku.baidu.com/view/0d2c78105f0e7cd184253641.html
如何将一串字符存储成二进制文件,而且如何读写?
问题补充:
我是菜鸟,请问你用的是不是VC啊?而且那读二进制文件呢?
您还可以输入9999 个字 |
#include<fstream.h> void main() { char str[80]; char temp[80]; fstream f("text.txt",ios::out|ios::binary); if(f.fail()){cout<<"error";return;} f.write((char *) &str,sizeof(str); f.close(); f.open("text.txt",ios::in|ios::binary); if(f.fail()){cout<<"error";return;} f.read((char *)& temp,80); cout<<temp; f.close(); }
vc++二进制文件读取
(2012-01-31 14:02:44)string SPath;//文件的全路径
FILE* fp=fopen(SPath.c_str(),"rb");
//分配空间存储整个二进制文件
//此时aa存放的就是整个二进制文件的字节流了
//应该还有更好的方法 先凑乎用吧。
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1024
int main(int argc, char *argv[])
{
if( argc < 3 )
{
printf("usage: %s %s\n", argv[0], "infile outfile");
exit(1);
}
FILE * outfile, *infile;
outfile = fopen(argv[2], "wb" );
infile = fopen(argv[1], "rb");
unsigned char buf[MAXLEN];
if( outfile == NULL || infile == NULL )
{
printf("%s, %s",argv[1],"not exit\n");
exit(1);
}
int rc;
while( (rc = fread(buf,sizeof(unsigned char),MAXLEN,infile)) != 0 )
{
fwrite( buf, sizeof( unsigned char ), rc, outfile );
}
fclose(infile);
fclose(outfile);
system("PAUSE");
return 0;
}
这个程序的作用就是将文件1的内容直接拷贝到文件2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。
下面是关于fopen,fread,fwrite三个函数的详细说明。
使用C++读写二进制文件
JAVAV工程师权威认证
[上海央邦]学一送一,超值! 【安博亚威】CCIE考试通过率第一!
定向委培RHCA,通过考试年薪10W
Windows高级工程师的培训地
今天终于弄明白怎样使用C++读写二进制文件了。
要读取文件必须包含<fstream>头文件,这里包含了C++读写文件的方法。
可以使用fstream类,这个类可以对文件进行读写操作。
1、打开文件。
打开文件可以有两种方式,第一种可以使用fstream类的构造函数。
fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app);另外一种方法就是使用open函数。
fstream file;file.open("test.dat",ios_base::in|ios_base::out|ios_base::app);这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。
这里需要说明一点,如果文件不存在的话,open函数中第二个参数必须包含ios_base::out|ios_base::app,否则就不能正确创建文件。
2、写文件。
先进性写文件的操作否则读一个空文件是没有意义的。
既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write函数。
但是write函数的原形是write(const char * ch, int size)。第一个参数是char *类型,所以需要把将要写入文件的int类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。
int temp;file.write((char *)(&temp),sizeof(temp));3、读文件。
可以写文件了,读文件就好办多了。读文件需要用到read函数。其参数和write大致相同,read(const char * ch, int size)。
要把内容读到int类型变量中同样涉及到一个类型转换的问题。和写文件一样。
int readInt;file.read((char *)(&readInt),sizeof(readInt));这样文件中的int值就读入到int型变量readInt中了。
4、文件指针。
在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。
在fstream类中有两个文件指针,一个是读取文件的指针,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。
同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。
先对几个枚举类型进行一下说明:ios_base::beg ——文件开始位置ios_base::cur ——文件当前位置ios_base::end ——文件末尾位置
下面以seekg为例说明一下指针移动的方法:file.seekg(3) ——指针移动到第三个字符的位置file.seekg(ios_base::beg) ——指针移动到文件开头file.seekg(ios_base::end) ——指针移动到文件末尾file.seekg(-3,ios_base::cur) ——指针当前位置向前移动三个字符file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符5、对文件操作完毕后别忘了关闭文件。
file.close();
以上5个步骤就完成了对文件的读写操作。文本文件的操作是相同的,比二进制文件还要简单。
C++中文件的读写(转)
来源: 仕玉冰的日志
void AA(int poss,int pose,LPSTR fa,LPSTR fb,int selw)//13
{
CString strfa;
char wBuffer[64000];
strfa=fa;
CFile cfa;
cfa.Open((LPCTSTR)strfa,CFile::modeRead|CFile::typeBinary);
cfa.Seek(poss,CFile::begin);
cfa.Read((void*)wBuffer,pose-poss);
wBuffer[pose-poss]='\0';
CString str;
str=wBuffer;
str.Remove('\r');//[11/15/2007]
AfxMessageBox("kaishi!");
AfxMessageBox(wBuffer);
AfxMessageBox(str.GetBuffer(0));
if(selw==1)
BB(fb,str.GetBuffer(0));
else
CC(fb,str.GetBuffer(0));
cfa.Close();
}
以上是我的程序,你将就着看一下,,