2013-11-30 4 views
0

У меня есть файл с именем myPoints.txt в c:\\....\mydocuments. Он содержит список нескольких x, y точек (например, 3.4.5.6). Я пытаюсь открыть его, используя ifstream. Как только я вхожу в каталог файлов я получаю сообщение об ошибке выполнения, и программа закрывается. (Например, ... c:\mydocuments\myPoints.txt)Как прочитать путь к файлу из ввода на C++, чтобы вы могли открыть txt-файл?

  1. Как я введен правильный реж файл?
  2. Есть ли чистый способ поместить этот код в функцию с «ifstream ifs» в качестве параметра?

Вот мой файл кода открытия:

int main() 
{ 
    cout << "Please enter the file name: "; 
    string name; 
    cin >> name; 
    ifstream ifs(name.c_str()); 
    if (!ifs) error("can't open input file ", name); 

    vector <Point> points; 
    Point p; 
    while (ifs >> p) points.push_back(p); 
    // .... 
} 

Не уверен, что, если проблема в моей функции ifstream поэтому я добавлю на всякий случай:

ifstream& operator >>(ifstream& ifs, Point& p) 
{ 
    double x, y; 
    char comma; 
    ifs >> x >> comma >> y; 
    if (!ifs) return ifs; 
    if (comma != ',') { 
     ifs.clear(ios_base::failbit); 
     return ifs; 
    } 
    p = Point(x, y); 
    return ifs; 
} 
+0

Не уверен, что проблема в моей функции ifstream, поэтому я добавлю ее на всякий случай: ifstream & operator >> (ifstream & ifs, Point & p) { double x, y; char comma; ifs >> x >> comma >> y; если (! Ifs) \t возвращение если; if (comma! = ',') \t { \t ifs.clear (ios_base :: failbit); \t возвращение ifs; \t} p = Точка (x, y); return ifs; } – user2904033

+5

Да, вы можете ввести полный путь к файлу. Главное, что вам нужно набирать все это правильно (например, по крайней мере, в большинстве мест, вам нужно место в «Мои документы»). Также обратите внимание, что 'cin >> name;' будет читать только до первого символа пробела. Вероятно, вы хотите 'std :: getline (cin, name);', поэтому он будет читать целую строку. –

+1

Не публикуйте код в комментариях, отредактируйте его в вопросе. – Angew

ответ

0

Да, ты может ввести полный путь к файлу. Главное, что вам нужно набирать все это правильно (например, по крайней мере, в большинстве мест, вам нужно пространство в My Documents).

Также обратите внимание, что код cin >> name; (где name - это std::string) будет читать только до первого символа пробела. Вероятно, вы, скорее всего, захотите std::getline(std::cin, name);, поэтому он будет читать целую строку (т. Е. Все, что вы вводите, до возврата каретки).

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

  • Нет связанных вопросов^_^