C ++ программа для копирования текстовых файлов с использованием заголовочного файла - PullRequest
0 голосов
/ 30 апреля 2011

Здравствуйте, я делаю программу, которая должна копировать текстовый файл. Текстовый файл - это всего лишь 3 строки текста на данный момент. Функция textFileCopy должна считывать текстовый файл, указанный в массиве filenamein, а затем выводить копию текстового файла, указанного в массиве filenameout.

Это мой файл 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;
}

У меня проблемы с созданием функции, определенной в файле .h в файле .cpp, и я получаю ошибки с этой строкой FileUtilities::textFileCopy(char filenamein[], char filenameout[]) из файла .cpp. Я знаю, что реальный код в функции работает только в первой строке

UPDATE

Хорошо, я поставил bool перед функцией.

Теперь программа компилируется, и я получаю сообщение об ошибке в диалоговом окне следующим образом

"Библиотека отладки Microsoft Visual C ++

Ошибка отладочного подтверждения!

Программа: ..... Parser.exe файл f: \ dd \ vctools \ crt_bld \ Self_x86 \ crt \ src \ fopen.c Строка 53

Выражение: (file! = NULL) "

затем он открывает файл "dbghook.c" в visual studio

Ответы [ 2 ]

3 голосов
/ 30 апреля 2011

Вам нужно поставить тип возвращаемого значения (bool) перед именем функции.

bool FileUtilities::textFileCopy(char filenamein[], char filenameout[])
0 голосов
/ 01 мая 2011

textFileCopy(false, false) неявно преобразуется в textFilecopy(NULL, NULL), и когда вы пытаетесь открыть ifstream с пустым именем файла, вы получаете утверждение, которое видите.

...