未能使用运算符重载将文件内容复制到另一个文件中

时间:2015-10-21 18:38:17

标签: c++ file

我试图通过重载“=”运算符将一个文件的内容复制到另一个文件中。 我想做的事情就像我写的那样,file2 = file1,file1的内容将被写入file2。 但我的代码没有这样做。 这是我到目前为止所做的。

Dim methods As New Dictionary(Of String, Action)
methods.Add("RP1", AddressOf CreateRP1)
methods.Add("RP2", AddressOf CreateRP1)
' ...
methods(userInput).Invoke()

2 个答案:

答案 0 :(得分:4)

问题似乎来自您的函数setContent中的以下行:

std::ofstream file(filePath);

使用的变量filepath是作为参数传递的变量(原始路径不是目标路径)。您正在尝试从原点到原点进行复制。

答案 1 :(得分:3)

我可以在您提供的代码中看到几个问题:

  1. 在方法setContent中,filePath参数隐藏了成员filePath,因为它们具有相同的名称。因为它是打开filePath参数给出的文件(不是由此表示的文件)并写入参数内容的值。您要做的是完全删除filePath参数。这样它就会将内容写入由此表示的文件。

  2. 在构造函数中,当你调用getline时,你不是在读取文件的全部内容,而是只读第一行。要阅读整个内容,您应该迭代读取行并将它们附加到您的字符串。您可以使用以下代码执行此操作:

    #include <fstream>
    #include <string>
    
    #define BUFF_SIZE 512
    
    std::string ReadFile(const char* fileName)
    {
      std::string ret;
      std::ifstream ifs(fileName);
      char buff[BUFF_SIZE];
      do {
        ifs.read(buff, BUFF_SIZE);
        ret.append(buff, ifs.gcount());
      } while (!ifs.eof());
    
      return ret;
    }
    
  3. 这对你想要做的事情并不重要,但记住它是件好事。在赋值运算符中,最好通过const引用传递参数(const EasyFile&amp; file而不仅仅是EasyFile)。您需要通过在签名末尾和左大括号前附加关键字const来将getter方法标记为const。