ep9_9.cpp
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. /*9.8 用二进制方式,把一个文件连接到另一个文件的尾部,选择适当的文件打开方式完成。*/
  2. /*9.9 同上题,采用重新定位文件指针方式来实现(随机访问方式)。*/
  3. #include<fstream>
  4. #include<iostream>
  5. #include<cstdlib>
  6. using namespace std;
  7. int main(){
  8. int n;
  9. char filename[256],buf[100];
  10. fstream sfile,dfile;
  11. cout<<"输入源文件路径名:"<<endl;//请用s.txt
  12. cin>>filename;//对路径各方面而言空格是无关紧要的,否则要用getline()等成员函数
  13. sfile.open(filename,ios::in|ios::binary);//打开一个已存在的二进制文件
  14. while(!sfile){
  15. cout<<"源文件找不到,请重新输入路径名:"<<endl;
  16. sfile.clear(0);//出错后,状态必须清0
  17. cin>>filename;
  18. sfile.open(filename,ios::in|ios::binary);
  19. }
  20. cout<<"输入目标文件路径名:"<<endl;//请用d.txt,s.txt接于其后;千万不可用源文件,会死循环(A行)
  21. cin>>filename; //只能创建文件,不能建立子目录,如路径不存在则失败
  22. dfile.open(filename,ios::in|ios::out|ios::binary);  //打开输入输出文件
  23. if(!dfile){
  24. dfile.clear(0);
  25. dfile.open(filename,ios::out); //建立输出文件
  26. dfile.close();
  27. dfile.open(filename,ios::in|ios::out|ios::binary);     //改为输入输出文件
  28. }
  29. dfile.seekp(0,ios::end);//写指针重定位到文件尾,用seekp和seekg是一样的,物理上文件指针只有一个
  30. while(!sfile.eof()){//二进制方式需另判文件是否结束   A
  31. sfile.read(buf,100);
  32. n=sfile.gcount();
  33. dfile.write(buf,n);//按实际读取字节数写
  34. sfile.close();
  35. dfile.close();
  36. return 0;
  37. }
  38. //如果用word文档,则可见目标文档大小在翻倍,但只能读最前面一段,word文档构造前面有一大堆说明,
  39. //真正链接,源文件说明要去掉,但这做不到。