2015-04-26 2 views
-1

«Ваше задание - предложить пользователю ввести имя файла с указанием пути на диске. Если файл не существует в указанном месте, ваша программа должна выйти с соответствующим сообщением об ошибке« Привет всем, так это то, где у меня вопрос, я был в состоянии заставить пользователя ввести имя файла, как это ..Получение пользователя для входа в файл C++

1.   cout<< "enter the data file name you wish to open"; 
2.   cin >>file; 
3.   indata.open(file.c_str()); 
4.   outdata.open(file.c_str()); 

Вторая часть вопроса, если файл не существует, программа должна сделать ошибку, как бы я это сделал, скажем, мое имя файла txt.source, но пользователь вводит lil.pol, как я могу заставить его сказать, что есть ошибка или другие слова, как я могу сделать имя файла желательным только для компьютера, который будет принят?

ответ

1

Что вы можете сделать, это попытаться открыть файл, и если он не может открыть выдать сообщение через std::cerr как это:

std::ifstream indata(file.c_str()); 

if(!indata) // failed to open 
{ 
    std::cerr << "Error: could not open file: " << file << std::endl; 
    return 1; // error code 
} 

// use indata here (its open) 
1

Edit:

чтения/записи данных:

void createfile() 
{ 
    ofstream file_handle("test.txt"); 
    if (!file_handle) 
     return; 

    //add record: 
    file_handle << "firstname1" << endl; 
    file_handle << "lastname1" << endl; 
    file_handle << "college1" << endl; 
    file_handle << "1001" << endl; 

    //add another record: 
    file_handle << "firstname2" << endl; 
    file_handle << "lastname2" << endl; 
    file_handle << "college2" << endl; 
    file_handle << "1002" << endl; 

    //remember each record is 4 lines, each field is single line 
    //this is the file format 
} 

int main() 
{ 
    createfile(); 

    ifstream fin("test.txt"); 
    if (!fin) 
    { 
     cout << "file not found" << endl; 
     return 0; 
    } 

    ofstream fout("out.txt");//note, it's a different name than input file 
    if (!fout) 
    { 
     cout << "cannot create new file" << endl; 
     return 0; 
    } 

    char buffer[1000]; 

    while (fin) 
    { 
     cout << "attempting to read record:\n"; 
     for (int i = 0; i < 4; i++) 
     { 
      fin.getline(buffer, 1000, '\n'); 
      if (!fin) break; 

      cout << buffer << endl;//write to screen 
      fout << buffer << endl;//write to file 

      if (i == 3) 
      { 
       //buffer is expected to be a number! 
       int number = atoi(buffer); 
       //multiply by random number 2, just testing 
       cout << number * 2 << endl; 
      } 
     } 
    } 

    return 0; 
} 

Просто создайте цикл и попросите новую запись, если имя файла неверно.

int main() 
{ 
    ifstream indata; 
    string fname; 
    for (;;) 
    { 
     cout << "enter fname, zero to exit\n"; 
     cin >> fname; 
     if (fname == "0") 
      return 0; 
     indata.open(fname); 
     if (indata) 
      break;//file is valid and has been opened now 
     cout << "file not found, try again\n"; 
    } 

    return 0; 
} 
+0

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

+0

Это очень простая задача. Ответ Галика делает именно то, что задает задание. Если имя файла неверно, файл не находится на компьютере, операция открытия не выполняется. Нет ничего другого. Я поставил более причудливую версию, которая просит повторного входа, если в первый раз была ошибка, на этот вопрос не беспокойтесь. Следующий шаг - создать файл для 'outdata'. На этот раз не имеет значения, нет ли файла на компьютере, программа создаст файл и готова к записи. Просто убедитесь, что вы вводите другое имя файла для 'outdata'. –

+0

Итак, я предполагаю, что меня смущает то, что у меня есть список данных, колледжей имен и число, которое я пытаюсь получить при открытии файла, и я не понимаю, как заставить их выводить. Также, когда у меня есть indata.open (файл), открытый красный цвет и не будет работать. –