c++ 从文件中fin.read()和fin.write()
#include<iostream>#include<fstream>usingnamespacestd;intmain(intargc,constchar*argv[]...
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, const char * argv[]) {
unsigned char *z;
int k;
ifstream fin("/Users/wuzihong/Desktop/Untitled1.jpg",ios::binary);
fin.seekg(0,ios::end);
int size1 = fin.tellg();
fin.seekg(0,ios::beg);
cout<< "文件大小为:"<<size1<<" 字节"<<endl;
ofstream fout("/Users/wuzihong/Desktop/2.jpg",ios::binary);
k=300;
z= new unsigned char[k];
while (fin.read((char *)(&z), k*sizeof(char)))
{
size1=size1-k;
fout.write((char *)(&z), k*sizeof(char));
if (size1 < k)
{
fin.read((char *)(&z), size1*sizeof(char));
fout.write((char *)(&z), size1*sizeof(char));
}
}
fin.close();
fout.close();
return 0;
}
求大神看看,我这个Untitled1.jpg是610kb的图片,小文件,当我把程序中的k值开到300以上,就出现了生成文件损坏,当我把k值开到400多程序就会挂掉,无法fin.write(),当我把k开到1000以上,程序就不能读入,请问为什么呢~不管是fin什么文件都是这样,困扰了好久了,求解决~谢谢 展开
#include <fstream>
using namespace std;
int main(int argc, const char * argv[]) {
unsigned char *z;
int k;
ifstream fin("/Users/wuzihong/Desktop/Untitled1.jpg",ios::binary);
fin.seekg(0,ios::end);
int size1 = fin.tellg();
fin.seekg(0,ios::beg);
cout<< "文件大小为:"<<size1<<" 字节"<<endl;
ofstream fout("/Users/wuzihong/Desktop/2.jpg",ios::binary);
k=300;
z= new unsigned char[k];
while (fin.read((char *)(&z), k*sizeof(char)))
{
size1=size1-k;
fout.write((char *)(&z), k*sizeof(char));
if (size1 < k)
{
fin.read((char *)(&z), size1*sizeof(char));
fout.write((char *)(&z), size1*sizeof(char));
}
}
fin.close();
fout.close();
return 0;
}
求大神看看,我这个Untitled1.jpg是610kb的图片,小文件,当我把程序中的k值开到300以上,就出现了生成文件损坏,当我把k值开到400多程序就会挂掉,无法fin.write(),当我把k开到1000以上,程序就不能读入,请问为什么呢~不管是fin什么文件都是这样,困扰了好久了,求解决~谢谢 展开
1个回答
展开全部
//文件的读取输入改成这样试试
while (fin.read((char *)z, k*sizeof(char)))
{
size1=size1-k;
fout.write((char *)z, k*sizeof(char));
if (size1 < k)
{
memset(z,k,0);
fin.read((char *)z, size1*sizeof(char));
fout.write((char *)z, size1*sizeof(char));
}
}
更多追问追答
追问
确实可以用了,但不知道为什么,可以讲一下吗?谢谢,当我把memset函数去掉,程序也可以正常执行
追答
z表示创建的内存缓冲区的地址
&z是指针z的地址,不能有做缓冲区的地址
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询