首页 > 解决方案 > 为什么在 C++ 中尝试使用 fstream 复制文件时遇到数据丢失?

问题描述

我正在使用 C++ 开发一个小项目,该项目是关于复制图像文件的。到目前为止,我似乎无法阻止数据丢失的发生。所有复制的图像都会经历高达 2% 的数据丢失(损坏)。我的代码中是否存在缺陷,或者是我不知道的图像编解码器的问题?另外,有没有更有效的方法来做到这一点?代码在下面。

提前致谢。

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <vector>
#define FILE_SRC "IMAGE1.jpg" // name of file to be copied
#define FILE_DES "IMAGE2.jpg" // name of file clone
using namespace std;
void copy_file()
{
    puts("Press Any Key to Begin.");  if (cin.ignore()) { ; }
    
    vector <unsigned char> fileData; // data from source file will be temporarily stored in vector
    fstream targetFile;
    unsigned char targetByte;
    
// START : copies data from source file and stores in vector
    targetFile.open(FILE_SRC, ios::in | ios::binary);
    while (targetFile >> targetByte)
    {
        fileData.push_back(targetByte);
    }
    targetFile.close();
// END : copies data from source file and stores in vector

    puts("File Loaded.");
    
// START : checks if destination file already exists , if not , create new
    targetFile.open(FILE_DES);
    if (targetFile.fail())
    {
        targetFile.close();
        targetFile.open(FILE_DES,ios::out);
    }
    targetFile.close();
// END : checks if destination file already exists , if not , create new

    targetFile.open(FILE_DES, ios::app | ios::binary);
    
// START : writes data from vector to destination file
    for (unsigned int i = 0; i < fileData.size(); i++)
    {
        targetFile << fileData.at(i);
    }
    targetFile.close();
// END : writes data from vector to destination file

    puts("File Copied.");
}
int main()
{
    copy_file();
    return 0;
}

标签: c++c++11c++14fstream

解决方案


推荐阅读