#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, чтобы выяснить, действительно ли файл не существует.