2014-09-11 6 views
0

Я пытаюсь прочитать информацию из одного файла, затем преобразует информацию, которая была прочитана, и выводит ее в другой файл. Затем мне нужно удалить исходный файл и переименовать первый второй файл, содержащий обновленную информацию. Я пытаюсь сделать это, вызвав исходный файл, преобразовывая информацию и сохраняя информацию в новый файл, затем использую функцию delete и функцию переименования, которая находится на C++. любая идея, почему я получаю сообщение об ошибке при открытии файла?Почему я продолжаю получать ошибку этого файла?

data.txt содержит

  • XCIX
  • XI
  • IX

temp.txt пуст

и сохраняются в C: \ Users \ Владелец \ Documents \ Visual Studio 2013 \ Projects \ Roman числительные \ Debug

int main() 
{ 
fstream dataFile; 
fstream outfile;  
string line; 
string output; 
outfile.open("temp.txt", ios::out); 
dataFile.open("data.txt", ios::in); 

if (!dataFile) 
{ 
    cout << "File Error\n"; 

} 
else 
{ 
    cout << "Opened correctly!\n" << endl; 
    while (dataFile) 
    { 
     if (dataFile.eof()) break; 
     getline(dataFile, line); 
     if (line[1] == '1' || line[1] == '2' || line[1] == '3' || line[1] == '4' || line[1] == '5' || line[1] == '6' || line[1] == '7' || line[1] == '8' || line[1] == '9' || line[1] == '0') 
     { 
      outfile << numbertonumberal(line) << "\n"; 
     } 
     else 
     { 
      outfile << romantonumberal(line) << "\n"; 
     } 
    } 

    dataFile.close(); 
    remove("data.txt"); 
    rename("temp.txt", "data.txt"); 
    cout << "All values have been converted are are in the original file\n"; 
    outfile.close(); 
} 


return 0; 
} 

Мой выход представляет собой одну строку, которая говорит об ошибке файла.

+1

Подтвердили ли вы, что data.txt на самом деле существует, и что рабочий каталог вашего проекта, когда это начинается, где вы думаете, что это так? – wakjah

+1

Обратите внимание, что рабочий каталог не обязательно тот, в котором находится ваш исполняемый файл. – Cthulhu

+0

Я не уверен, что рекомендуется закрыть только выходной файл ПОСЛЕ того, как вы переименовали его из temp.txt в data.txt. Ouput может быть буферизирован и только очищается до физического файла, когда он фактически закрыт. – antred

ответ

0

Сначала: проверьте файл. Он существует? И у вас есть какие-то ошибки в коде:

if (!dataFile) // incorrect. datafile is instance of class but not ponter 
if (datafile.is_open()) // correct. use a method from fstream class 

while (dataFile) // incorrect. its true while object "datafile" exists (see above) 
while (!datafile.eof()) // correct. And you don`t need "if (dataFile.eof()) break;" 

Таким образом, ваш код должен быть похож на это:

if(datafile.is_open()) { 
    while(!datafile.eof()) { 
     getline(datafile, line); 

     ... // use isdigit() function for compare with digits (<cctype> header) 
    } 
} else { 
    cerr << "Cannot open file" << endl; 
} 
+2

классы, подобные октету, имеют оператор преобразования для булевых контекстов, который при вызове возвращает true, если поток находится в хорошем состоянии, то есть в этом случае, если он был открыт и может быть считан. Выражение «if (! DataFile)» вполне приемлемо. – antred

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