2011-04-30 157 views
0

你好,我正在制作一个应该复制文本文件的程序。该文本文件目前只是3行文本。 textFileCopy函数应该读入由文件名数组给出的文本文件,然后输出由文件名数组给出的文本文件的副本。C++使用头文件复制文本文件程序

这是我的main.cpp文件。在这个文件中,程序需要用户发送一个输入文件名和一个输出文件名作为参数,我刚刚在Visual Studio中使用命令参数框,命令参数框中包含“input.txt output.txt”,所以这意味着的argv [1]包含在输入文件和argv [2]包含输出文件,该文件是要创建

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

#include "FileUtilities.h" 


int main(int argc, char **argv) { 
    FileUtilities fileUtil; 
    fileUtil.textFileCopy(false, false); 
    if (argc !=3) { 
     cerr << "Usage: " << argv[0] << " <input filename> <output filename>" << endl; 
     int keypress; cin >> keypress; 
     return -1; 
    } 

    fileUtil.textFileCopy(argv[1], argv[2]); 

    int keypress; cin >> keypress; 
} 

而这正是FileUtilities.h文件,该文件声明textFileCopy功能

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
#pragma once 

class FileUtilities 
{ 
public: 
    bool textFileCopy(char filenamein[], char filenameout[]); 
}; 

而这里是匹配的FileUtilities.cpp文件,包括textFileCopy函数

#include <iostream> 
#include <fstream> 
#include <string> 

#include "FileUtilities.h" 

bool FileUtilities::textFileCopy(char filenamein[], char filenameout[]) 
{ 
    ifstream fin(filenamein); 
    if(fin.is_open()) 
    { 
     ofstream fout(filenameout); 

     char c; 
     while(fin.good()) 
     { 
      fin.get(c); 
      fout << c; 
     } 

     fout.close(); 
     fin.close(); 

     return true; 
    } 
    return false; 
} 

我在创建.cpp文件中.h文件中定义的函数时遇到了问题,并且我从.cpp文件中得到了此行FileUtilities::textFileCopy(char filenamein[], char filenameout[])的错误。我知道在函数的实际代码工作它只是一线

UPDATE

行,所以我已经把布尔函数之前。

现在程序编译,我得到一个错误的对话框如下

“微软的Visual C++调试库

调试断言失败

计划:!.....分析器。 EXE文件 F:\ DD \ vctools \ crt_bld \ Self_x86 \ CRT \ SRC \ fopen.c 线53

表达:(文件!= NULL)”

然后它会在visual studio中打开文件“dbghook.c”

+1

您可以发布您正在收到的错误,这将更容易诊断您的问题。一个明显的问题是你错过了'bool'返回类型。 – Pablo 2011-04-30 19:49:30

+2

**请**不要在命名空间中使用'namespace',这会让您的代码更少重用。 – 2011-04-30 19:49:49

+0

您还有其他问题。把它放在另一个帖子中。 – 2011-04-30 20:12:54

回答

0

textFileCopy(false, false)被隐式转换为textFilecopy(NULL, NULL),当你试图用一个空文件名来打开一个ifstream,你得到你所看到的断言。

+0

中打开一个文件”dbghook.c“,这就是它,谢谢,我将它改为'fileUtil.textFileCopy(argv [1], argv [2]);'并删除if语句下面的行 – Marc 2011-04-30 20:46:50

3

您需要将返回类型(bool)放在函数名称的前面。

bool FileUtilities::textFileCopy(char filenamein[], char filenameout[]) 
+0

好吧,所以我已经把功能之前布尔。 现在程序编译,我得到一个错误的对话框如下 “微软的Visual C++调试库 调试断言失败 计划:!..... Parser.exe文件f:\ DD \ vctools \ crt_bld \ Self_x86 \ CRT \ SRC \的fopen。c第53行 表达式:(文件!= NULL)“ 然后它会在visual studio – Marc 2011-04-30 20:08:46