|
4、小作业:
通过文件读写的方式,自己实现一个函数,实现文件的拷贝功能。
代码如下:
- ifstream ifs;
- ifs.open("d:\\123.txt");
- if (!ifs) return 0;
- ifs.seekg(0,ios::end); //将文件指针指到文件尾
- int file_len;
- file_len = ifs.tellg(); //计算文件字节数
- char * buff = new char[file_len]; //根据文件大小建立一个内存缓存空间并赋值给指针buff
- ifs.seekg(0); //将文件指针设置为从头开始
-
- ifs.read(buff, file_len); //根据文件大小以二进制方式读取文件到缓存
- cout << buff << endl;
- ofstream ofs;
- ofs.open("d:\\234.txt"); //打开写入文件
- if (!ofs) return 0;
- ofs.write(buff,file_len); //将缓存中的内容写入文件
- ifs.close();
- ofs.close();
- delete[]buff; //关闭文件流,并释放内存空间
复制代码
执行后,新的文件234.txt会比原来的文件123.txt多出5个字节,如下图,请问是什么原因?
本帖最后由 muye12921 于 2019-11-2 12:49 编辑
我和你的实现方式有点区别,使用的是二进制读写的方式,当初做的时候试了下,不会出现多了字节的情况,你的方法是动态在堆上分配内存,对小文件的拷贝还行,大文件有问题,至于字节数问题,还没仔细研究,估计和使用字符读写有关系,可以改成二进制读写试试
- void file_copy(const char* source, const char* dest)
- {
- ifstream fs_read(source, ios::binary);
- ofstream fs_write(dest, ios::binary);
- char buff[100] = { 0 };
- streamsize len = 0;
- if (fs_read && fs_write) {
- while (fs_read.read(buff, 100), len = fs_read.gcount()) {
- fs_write.write(buff, len);
- }
- }
- fs_write.close();
- fs_read.close();
- }
复制代码
|
上一篇: MFC UI使用怎么那么难。下一篇: c++ ide的区别
|