2017-03-03 124 views
-1

尝试使用while循环读取一个文件(它被称为“Stocks.dat”,我之所以使用while循环是因为将来可以追加X数量的股票;下面列出.dat文件的格式),以创建第二个文件“profits.dat”,其中包含“Stocks.dat”的信息,但带有新的计算浮点数。这运行罚款,但是当我检查“profits.dat”是否存在,那里什么也没有。为什么我没有得到一个包含所有计算内容的“profits.dat”文件?非常感谢。在一个.dat文件中无法读取以创建第二个.dat文件

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

int main() 
{ 
    char name[40]; 
    int sh; 
    float pp, cp, pc, cv, pr; 

    ifstream infile("c:\\Stocks.dat", ios::in); 
    ofstream outfile("c:\\profits.dat", ios::out); 


    while (infile.getline(name, 40)) //don't forget the whitespace 
    { 
    infile >> sh >> pp >> cp; 
    pc = sh * pp; 
    cv = sh * cp; 
    pr = cv - pc; 
    outfile << name << endl; //need the endline 
    outfile << pc << ' ' << cv << ' ' << pr << ' ' << endl; //need the blank spaces 
    infile.ignore(40, '\n'); 
    } 

    infile.close(); 
    outfile.close(); 

    return 0; 
} 

//Stocks.dat information: 
//APPLE 
//500 20.25 30.75 
//MICROSOFT 
//250 9.75 12.99 
//GOOGLE 
//1000 50.10 300.85 
+0

'outfile.fail()== false'?可能没有权限在'C:'上编写。尝试桌面。按预期在我的机器上工作,但路径更改为桌面 – mpiatek

+0

不确定你在说什么?我会如何给C写权限?我以前制作过读/写程序,并将其保存在项目文件夹中,但“profits.dat”不在项目文件夹中。 “尝试桌面”是什么意思? – polymorphism

+0

尝试改变桌面和没有骰子的路径:( – polymorphism

回答

1

这很可能是权限问题。您的ofstream无法打开位于C:处的写入文件 - 直接写入系统驱动器需要管理员权限(我认为从Windows Vista开始,但我不确定)。

您可以以管理员身份运行您的程序,或者在您可以编写的位置放置文件(将路径更改为打开以进行写入将创建文件)。

编辑:

更改此

ofstream outfile("c:\\profits.dat", ios::out); 

这个

ofstream outfile("c:\\users\\YOUR_USER\\desktop\\profits.dat", ios::out); 

或一些其他地方,你可以没有管理员权限写。您可以通过打开notepad并尝试保存文件来找到此类位置。如果您可以在该位置保存文件,则您的程序将成功创建profits.dat

+0

将'Stocks.dat'卡在桌面上,我仍然收到“权限被拒绝”错误。我也一定会更改代码中的文件路径。 – polymorphism

+1

您需要移动profits.dat,而不是股票。 – user4581301

+0

我试图让我的代码创建一个名为'profits.dat'的文件,其中包含所有新的计算以及相关的股票信息。 – polymorphism