2013-07-26 108 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:

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

+0

哈哈,可悲的是,我试过了更早,给了我一些奇怪的错误。我试了一遍,仍然没有opening.yeah条件错了我现在觉得很蠢.... – Svanhildr

+0

你现在得到什么错误?我只注意到你需要将'cout << sales [i] .name'移动到while循环中。否则,它可能会导致崩溃,因为索引处的SaleSlip将不具有名称值。 – 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() 
}