2013-07-26 11 views
0

Простая программа для открытия файла и чтения его содержимого. Затем тест в конце, чтобы узнать, действительно ли я получил информацию. Каждый раз, когда я запускаю его, он говорит мне, что он не может открыть файл. Я опубликую содержимое SaleSlips ниже. Почему он не открывает файл? Он также пытается удалить файл за каждый прогон.Visual C++ - Не удается открыть текстовый файл

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
using namespace std; 

struct SaleSlip{ 
    char name[20]; 
    int prodID; 
    double value; 
}; 

void main(){ 

    fstream slips; 
    SaleSlip sales[17]; 
    slips.open("SaleSlips.txt", ios::in); 
    if(slips.eof()){ 
     cout << "Cannot open file - SaleSlips.txt"<< endl; 
     system("pause"); 
     exit(2); 
    } 
    int i = 0; 
    while(!slips.eof()){ 
     slips.getline(sales[i].name, ' '); 
     slips >> sales[i].prodID; 
     slips.ignore(5, ' '); 
     slips >> sales[i].value; 
     slips.ignore(80, ' '); 
     i++; 
    } 
    cout << sales[1].value; 
    slips.close(); 
    system("pause"); 
} 

Eric 1 200000.00 
Sookie 2 200.00 
Sookie 4 200.50 

ответ

3

Вы открываете поток в режиме вывода с помощью ios::out. Используйте для этого текст ios::in.

У вас тоже много других проблем. IE:

-if(!slips.eof()) после открытия файла всегда будет выходить, если файл не пуст.
-В течение цикла while вы (вероятно, случайно) пытаетесь записать prodID и значение в файл с данными, используя <<. Используйте >> для чтения из потока и <<, чтобы написать ему.

+0

Ха-ха, К сожалению, я попробовал, что раньше, и дал мне некоторые странные ошибки. Я попробовал еще раз, но все еще не открываю. Это состояние было не так. Я чувствую себя глупо сейчас. – Svanhildr

+0

Какая ошибка вы сейчас получаете? Я просто заметил, что вам нужно переместить 'cout << sales [i] .name' в ваш цикл while. В противном случае это, вероятно, приведет к сбою, так как SaleSlip в индексе i не будет иметь значения имени. – Egg

+0

Моя черта. Хорошо, поэтому я получил его, чтобы «прочитать» его, но теперь, как только откроется консоль, он говорит, что project.exe больше не является рабочим, и я изменил его на 1 после того, как понял, что он сделал. Система («пауза») - это просто, чтобы я мог видеть, что выводится, не обращайте на нее внимания. – Svanhildr

0

У вас есть две проблемы:

Вы открываете файл для вывода (письма)

slips.open("SaleSlips.txt", ios::out); 

Используйте ios::in вместо ввода (чтения)

slips.open("SaleSlips.txt", ios::in); 

Далее» повторное тестирование для !eof(), что является неправильной логикой.

if(!slips.eof()) 

Вы не хотите быть в eof() при открытии файла для ввода. eof() есть end of file. При первом открытии файла для ввода вы хотите находиться в начале файла; находясь в eof() - это плохая вещь. Ваш код должен ошибка, если eof() правда, нет, если оно ложно:

if(slips.eof()) { 
    // It's an error if we're starting at eof() 
} 
Смежные вопросы