Проблема в том чтобы после выполнения исключения Owerwriting
программа продолжила работу и копировала файл,у меня она просто выдает исключение и не идет дальше.Как сделать так чтобы если файл существует(а не создается) в который нужно скопировать,выводилось исключение Owerwriting.
Написать функцию копирования файлов таким образом, чтобы она принимала две С-строки (имена файлов) и запускала исключение FileNotFound
в случае отсутствия того файла, который надо копировать, и исключение Overwriting в случае наличия того файла, куда надо записывать информацию. Написать функцию main
, вводящую с клавиатуры два имени файлов и копирующую один файл в другой с помощью написанной функции, а также перехватывающую возникающие исключения (в случае возникновения таких исключении надо попросить пользователя ввести имя соответствующего файла заново, до тех пор, пока операция копирования файлов не будет успешно выполнена.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void CopyFileFunction(const string& OutFile,const string& InFile)
{
char BufferRider[50];
ifstream Rider(OutFile);
Rider.getline(BufferRider, 50);
cout << BufferRider;
Rider.close();
ifstream fil(InFile);
fil.close();
ofstream file(InFile);
file << BufferRider;
file.close();
}
void FileNotFound(const string& OutFile)
{
cout << "Attempt to open or create a file." << endl;
ifstream FileNot(OutFile);
FileNot.exceptions(ifstream::badbit | ifstream::failbit);//Включаем в классе ifstream подробные данные об ошибке.
if (!FileNot.is_open()) {
throw exception("File not fount!");
}
}
void Overwriting(const string& OutFile)
{
ifstream FileNot(OutFile);
FileNot.exceptions(ifstream::badbit | ifstream::failbit);//Включаем в классе ifstream подробные данные об ошибке.
if (FileNot.is_open()) {
throw ("File is OK!");
}
}
int main()
{
try{
string OutFile, InFile;
cout << "Please,enter file name(with format).\n";
getline(cin, OutFile);
FileNotFound(OutFile);
Overwriting(OutFile);
cout << "Please,enter output file name(with format).\n";
getline(cin, InFile);
CopyFileFunction(OutFile, InFile);
cout << "Files copy!" << endl;
}
catch (const ifstream::failure &NotFound){//Передаем специальный класс в катч для отлова исключений(все классы в катч наследуются от expention).
cout <<endl << NotFound.what() << endl;
cout <<"\nCode a mistake:" << NotFound.code() << endl;
}
catch (const char &Found) {//Передаем как строку.
cout << Found << endl;
}
//catch (...) { cout << "Opss,work filed!"; }//Для всего остального.
system("pause");
return 0;
}
[1]: https://i.stack.imgur.com/f0rRY.jpg
[1]: https://i.stack.imgur.com/8y89f.jpg
Это мягко говоря плохой случай генерации исключения. Ну а не будет копировать, потому что исключение распространяется вверх по стеку уничтожая все локальные переменные на своем пути. Так исключение доберется до блока try catch, и тут то должен обработать это исключение блок catch, которого у вас нет.
В итоге: вы генерите исключение. Оно идёт вверх по стеку в поисках первого try catch. Если не находит блок, завершится все ошибкой (ваш вариант). Как видите, ни о каком дальнейшем выполнении кода, который идёт после функции генерящей исключение нет
Решение нашлось,поместил обработку исключений в функции.Извините за потраченное время ,ролики на ютубе насмотрелся) теперь правлю.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void CopyFileFunction(const string& OutFile,const string& InFile){
char BufferRider[50];
ifstream Rider(OutFile);
Rider.getline(BufferRider, 50);
cout << "Wath in file:" << BufferRider << endl;
Rider.close();
ofstream file(InFile);
file << BufferRider;
file.close();
}
void FileNotFound(const string& OutFile){
cout << "\nAttempt to open or create a file..." << endl;
try {ifstream FileNot(OutFile);if(!FileNot.is_open()){
throw exception("File not fount!");}}
catch(const exception &NotFound) {
cout << "\n\t\t\t\tAlert;" << endl;
cout << NotFound.what() << endl;
}
}
void Overwriting(const string& InFile){
try {ifstream FileYes(InFile);if(FileYes.is_open()){throw exception("File fount,owerwriting?");}}
catch (const exception &NotFound) {
cout << "\n\t\t\t\tAlert;" << endl;
cout << NotFound.what() << endl;}}
int main(){
string OutFile,InFile;
cout << "Please,enter file name(with format):";
getline(cin,OutFile);FileNotFound(OutFile);
cout << "Please,enter output file name(with format):";
getline(cin,InFile); Overwriting(OutFile);CopyFileFunction(OutFile,InFile);
cout << "\n\t\tFiles copy!" << endl;
system("pause");
return 0;}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Когда я пытаюсь создать/открыть проект Visual C++, я получаю такое сообщение:
Помогите понять в чем ошибкаУдаляет все правильно, но при выводе списка в консоли вылетает ошибка
Доброй ночи, форумчанеТакой вопрос: Как в переодичной функции обратного типа(CALLBACK WindProc()) закрывать окно при помощи CTRL+C? Знаю что можно через...