1、回答你第一个问题,就是因为你没有指明,文件是要读出,还是写入,仅仅指明了二进制打开,所以出问题。
2、因为 fstream是文件流,所以重载了<<和>>符号,所以你可以当成cout和cin用,可以不用像c语言里面的那样用缓冲区读数据。就像下面的例子,所以可以一下子,把数据读出来。
3、声明fstream时,传入参数时,就打开了,也可以像你那样,再open(但是此时不要在声明时调用默认构造,就是要用这种形式:fstream fs就可以了)。
#include <fstream>
#include <iostream>
using namespace std
int main(int argc, char **argv)
{
fstream fs("1.txt", /*ios::in | */ios::out/* | ios::trunc*/)
if (!fs.bad())
{
// Write to the file.
// fs <<"Writing to a basic_fstream object..." <<endl
// fs.close()
// Dump the contents of the file to cout.
// fs.open("1.txt", ios::in)
cout <<fs.rdbuf()
/* //这里也是合法的
char buffer[100]
fs >>buffer
cout <<buffer
*/
fs.close()
}
}
把ofile.close()移到ifstream ifile("D:\\data.dat",ios::binary)前就OK!因为写完文件后不关闭的话,文件指针位置指在最后,后面读打开后接着这个位置向后读取数据了,后面并没有写入什么。read()函数的原型是int read(int fd,void *buf,int count)。它的功能是“从文件说明符fd相关联的文件中读取count个字符,并把这些字符存储到buf所指的缓冲区中。返回值是 *** 作成功时所读到的字节数,在文件结束时可能少于count个字节;若返回值为-1则说明出错了,返回0则表示到达文件尾端。例:从文件ABC.txt中读取前100个字节存入数组buffer中——#include "stdin.h"
#include "io.h"
#include "fcnt1.h"
int main(void){
int fd
char buffer[100]
if((fd=open("ABC.txt",O_RDONLY))==-1){
printf("Can't open file.\n")
exit(-1)
}
if(read(fd,buffer,100)!=100)
printf("Possible read error!\n")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)