2016-01-29 4 views
1

Я пытаюсь написать программу, которая перемещает первую строку файла в новый файл. Моя цель состоит в том, чтобы новый файл не был создан, если входной файл не существует. Я получаю его, чтобы читать .good(), поэтому я получаю сообщение о том, что вход не удался. Однако я не могу заставить новый файл не создаваться.Выходной файл сохраняется, даже если входной файл не существует? **** EDIT ****

Вот код:

int main() 
{ 
     fstream inFile; 
     fstream outFile;; 
     string fileName(""); 
     string destName(""); 

     cout << "Please enter file name: "; 
     cin >> fileName; 
     cout << endl; 

     cout << "Please enter file name of destination: "; 
     cin >> destName; 
     cout << endl; 

     inFile.open(fileName, ios::in); 
     outFile.open(destName, ios::out); 

     getline(inFile, fileName); 

     if (inFile.good() != true) { 
       cout << "?Unable to input file!\n" << endl; 
       return 0; 
     } 

     else { 
       outFile << fileName << endl; 
       return 0; 
     } 

     if (outFile.good() == true) { 

       cout << "?File '" << destName << "' already exists!\n" << endl; 
       return 0; 
     } 

     inFile.close(); 
     outFile.close(); 

     return 0; 
} 

Может кто-нибудь помочь?

Заранее спасибо.

Спасибо за помощь ранее,

***** ***** EDIT

мне интересно сейчас, хотя. Если выходной файл уже существует, я хочу сделать заявление об ошибке, говорящее так. Однако, если файл существует или не существует, я все равно получаю сообщение об ошибке. Я попытался переместить outFile.open на дно, чтобы файл был создан до проверки, но он все еще говорит, что он уже существует?

int main() 

{ 
     fstream inFile; 
     fstream outFile;; 
     string fileName(""); 
     string destName(""); 

     cout << "Please enter file name: "; 
     cin >> fileName; 
     cout << endl; 

     inFile.open(fileName, ios::in); 

     getline(inFile, fileName); 

     if (inFile.good() != true) { 
       cout << "?Unable to input file!\n" << endl; 
       return 0; 
     } 

     cout << "Please enter file name of destination: "; 
     cin >> destName; 
     cout << endl; 


     if (outFile.good() == true) { 

       cout << "?File '" << destName << "' already exists!\n" << endl; 
       return 0; 
     } 

     outFile.open(destName, ios::out);  
     outFile << fileName << endl; 


     inFile.close(); 
     outFile.close(); 

     return 0; 
} 
+2

открыть FILESTREAM назначения Только тогда, когда вы собираетесь писать в него, в противном случае файл будет создан в любом случае. – NaCl

+1

'outFile.open (destName, ios :: out);' Посмотрите на свой код. Это создает выходной файл. – PaulMcKenzie

+0

Ах, неудивительно. Спасибо вам, ребята! Я просто вошел в класс C++, поэтому я ценю учения. – ryanpback

ответ

1

Вам необходимо переместить открытый вызов выходного файла после проверки входного файла.

Что-то вроде этого:

int main() 
{ 
     fstream inFile; 
     fstream outFile;; 
     string fileName(""); 
     string destName(""); 

     cout << "Please enter file name: "; 
     cin >> fileName; 
     cout << endl; 

     cout << "Please enter file name of destination: "; 
     cin >> destName; 
     cout << endl; 

     inFile.open(fileName, ios::in); 

     getline(inFile, fileName); 

     if (inFile.good() != true) { 
       cout << "?Unable to input file!\n" << endl; 
       return 0; 
     } 


     outFile.open(destName, ios::out); 
     outFile << fileName << endl;`enter code here`   

     if (outFile.good() == true) { 

       cout << "?File '" << destName << "' already exists!\n" << endl; 
       return 0; 
     } 

     inFile.close(); 
     outFile.close(); 

     return 0; 
} 
+0

Отлично, это хорошо работает. Большое спасибо! – ryanpback

Смежные вопросы