Visual C ++ - 无法打开文本文件

时间:2013-07-26 01:31:55

标签: c++ visual-studio-2010 visual-c++

打开文件并阅读其内容的简单程序。然后在最后进行测试,看看我是否确实得到了这些信息。每次我运行它告诉我它无法打开文件。我将在下面发布SaleSlips的内容。为什么不打开文件?它也试图在每次运行时删除文件。

#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

2 个答案:

答案 0 :(得分:3)

您正在使用ios::out以输出模式打开流。使用ios::in从中读取。

你也有很多其他问题。 IE:

- 文件打开后if(!slips.eof())将始终导致退出,除非文件为空 - 在while循环中,您(可能是偶然)尝试使用<<将prodID和值写入slip文件。使用>>从流中读取,并<<写入。

答案 1 :(得分: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()
}