функция ostream, по-видимому, не выдает сообщение об ошибке должным образом

#c

#c

Вопрос:

итак, я использую онлайн-инструмент оценки для проверки моего кода для этого метода, и ошибка, показанная ниже, продолжает отображаться:

В runAudit, если входной файл НЕ существует или выходной файл уже СУЩЕСТВУЕТ, программа не должна пытаться обработать входной файл. Вместо этого он должен выдавать сообщение об ошибке.

Однако в ходе моего обширного тестирования моя функция выдает сообщения об ошибках, как и ожидалось. Кто-нибудь знает, что может быть причиной этого?

 void runAudit(istreamamp; inputRead, ostreamamp; outputWrite) {
    string fileName;
    string outputFileName;
    outputWrite << "Enter the input file name: n";
    inputRead >> fileName;
    if (fileExists(fileName) == 1) {
        outputWrite << "Enter the output file name: n";
        inputRead >> outputFileName;
        if (fileExists(outputFileName) == 1) {
            outputWrite << "Error: Output file was found. n";
        }
        else {
            //this is the "processing files" function mentioned in the prompt
            processFiles(fileName, outputFileName);
        }
    }
    else if (fileExists(fileName) == 0) {
        outputWrite << "Input file not found. n";
    }
}
 

Редактировать: забыл добавить fileExists() метод. Я включил его ниже:

 bool fileExists(string fileName) {
    ifstream streamOne;
    streamOne.open(fileName);
    return !streamOne.fail();
}
 

Комментарии:

1.Если ваш компилятор относительно обновлен.

2. Вы открываете файл, чтобы проверить его существование. Если файл действительно существует, но у вас нет разрешения на его открытие, вы сообщаете, что файл не существует. Рассмотрите возможность использования другого способа проверки на наличие, например, stat() или std::filesystem::exists() . Кроме того, вы вызываете fileExists() входной файл несколько раз, что является избыточным. И почему вы сравниваете логические значения с целыми числами?

3. Я согласен с тем, что это плохой способ проверки на существование — приглашение для этого проекта диктует, что мы делаем это таким образом, поэтому я ничего не могу с этим поделать. Хотя многократный вызов FileExists является избыточным — я это исправлю

4. проверка на наличие файла может быть сложной, например, если в Windows используются UNC-пути. В этом случае я использую специальные функции file-open, stat и Windows, такие как ::GetFileAttributes, чтобы выяснить, действительно ли файл не существует.