2016-05-04 2 views
0

(Solved) (я не знаю, как его закрыть) Я пытаюсь принять ввод пользователя, чтобы открыть файл .dat, который находится в моих исходных файлах, но я не знаю, почему файл не открывается. Я уже проверял синтаксис и другие вещи, но я просто не могу найти решение.User Input Имя файла открыть файл

#include <iostream> 
#include <string> 
#include <fstream> 
#include "arrayFunctions.h" 

using namespace std; 

int main() 
{ 
    string fileName; 
    int size = 0; 
    ifstream inputFile; 
    do 
    { 
     cout << "Please enter file name: "; 
     getline(cin,fileName); 

     inputFile.open(fileName.c_str()); 
     if (!inputFile) 
     { 
     cout << "The file \"" << fileName << "\" failed to open.\n" 
       << "Check to see if the file exists and please try again" 
       << endl << endl; 
     } 
     while (inputFile.good()) 
     { 
      string stop = " "; 
      string num; 
      getline(inputFile, stop); 
      size++; 
     } 
    } while (!inputFile); 

    cout << size << endl << endl; 
    inputFile.close(); 

    system("pause"); 
} 

проблема, кажется, лежат в самом деле открытие файла, так как это не удается

do 
{ 
    ifstream inputFile("num.txt"); 
    opened = true; 
    if (!inputFile.is_open()) 
    { 
     cout << "The file \"" << fileName << "\" failed to open.\n" 
      << "Check to see if the file exists and please try again" 
      << endl << endl; 
     opened = false; 
    } 
    inputFile.close(); 
} while (!opened); 
+1

Вы уверены, что файл находится где он должен быть? Например, если пользователь входит в foo.txt, файл foo.txt должен быть где бы то ни было, где рабочий каталог для процесса: –

+0

@Jerry Jerehmiah Очевидно, мне нужно было переместить файл в папку с исходным кодом, а не перетаскивать его в папку исходного кода на визуальной студии Microsoft. Я выбираю ваш в качестве ответа, но его комментарий –

ответ

0

Я думаю, что ваша проблема в том, что inputFile является объект, определенный в стеке, так положить, что непосредственно в случае скорее всего, не делает то, что, по вашему мнению, делает - он всегда будет ссылкой на объект и никогда не будет нулевым.

Я не уверен, что произойдет, если вы неявно конвертируете ifstream в логическое. изменение этого

if (!inputFile) 

к

if (!inputFile.is_open()) 

Я шлифованного на ссылки для потоков, в частности, то, что делает метод good()

Try. Эффективно слишком много для вас, чтобы вывести, что не так - это может быть ошибка жесткого диска, ошибка разрешений, неправильное имя файла и т. Д.

Вы получите более четкое представление о том, что происходит, если вы показываете сообщение об ошибке, используя что-то вроде этого (адаптировано из ссылки C++):

if (!inputFile.good()) { 
    cout << "The file \"" << fileName << "\" failed to open.\n" 
    cout << "good()=" << inputFile.good(); 
    cout << " eof()=" << inputFile.eof(); 
    cout << " fail()=" << inputFile.fail(); 
    cout << " bad()=" << inputFile.bad(); 
} 
+0

, который не работает. Но ifstream предоставляет такие функции, как good и fail, которые я пытался с тем же результатом. Кажется, файл не открывается –

+0

@ Darr Brett Я понял, что моя ошибка была вызвана тем, что визуальная студия не перемещала файл в свой каталог, когда я перетащил его в папку исходного кода в проводнике решений. Мне пришлось переместить файл в самом файле. Независимо от того, что полезно знать/я могу сделать это с ошибками –