C++ Can';t读入一个.dat文件以创建第二个.dat文件

C++ Can';t读入一个.dat文件以创建第二个.dat文件,c++,file-io,C++,File Io,尝试使用while循环读取一个文件(称为“Stocks.dat”,我使用while循环的原因是,将来可能会追加X个数量的股票;下面列出了.dat文件的格式)以创建第二个文件“profits.dat”,其中包含“Stocks.dat”的信息,但有新的计算浮动。这个运行得很好,但是当我检查是否存在“profits.dat”时,那里什么也没有。为什么我没有一个包含所有计算结果的“利润.dat”文件?非常感谢 #include<iostream> #include<fstream>

尝试使用while循环读取一个文件(称为“Stocks.dat”,我使用while循环的原因是,将来可能会追加X个数量的股票;下面列出了.dat文件的格式)以创建第二个文件“profits.dat”,其中包含“Stocks.dat”的信息,但有新的计算浮动。这个运行得很好,但是当我检查是否存在“profits.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
#包括
#包括
使用名称空间std;
int main()
{
字符名[40];
int-sh;
浮动pp、cp、pc、cv、pr;
ifstream-infle(“c:\\Stocks.dat”,ios::in);
流出流文件(“c:\\profits.dat”,ios::out);
while(infle.getline(name,40))//不要忘记空格
{
填充>>sh>>pp>>cp;
pc=sh*pp;
cv=sh*cp;
pr=cv-pc;

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

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

编辑:

改变这个

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

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

或者其他无需管理员权限即可写入的位置。您可以通过打开
notepad
并尝试保存文件来找到该位置。如果您可以在该位置保存文件,您的程序将在该位置成功创建
profites.dat

是否执行
outfile.fail()==false
?可能没有在
C:
上写入的权限。请尝试桌面。在我的计算机上按预期工作,但路径已更改为desktop不确定您在说什么?我如何授予在C:?我以前编写过读/写程序,它会将其保存在项目文件夹中,但“profits.dat”不在项目文件夹中。您说的“尝试桌面”是什么意思?已尝试更改桌面路径,但没有骰子:(我的意思是,您的程序可能没有足够的权限打开文件进行写入或直接在路径
C:
处创建它。好的,您尝试了,但没有成功。
outfile.fail()返回了什么)
构建对象后?将其添加到问题中。因此,我为
outfile.fail()
创建了一个if语句,它返回了我的cout“无法打开文件!”,所以是的,它没有打开文件……我该怎么办?将
Stocks.dat
粘贴到桌面上,我仍然得到“权限被拒绝”错误。我还确定要更改代码中的文件路径。我正试图让我的代码创建一个名为
profits.dat
的文件,其中包含所有新计算以及相关的股票信息。@请将传递给流
构造函数的路径更改为桌面,或者首先以管理员身份运行该程序看看它是否真的解决了这个问题。是的,但这是一个文件,你不能打开写入,只要它将被写入C的根目录。不要在那里写入,问题就会消失。除非你选择写入另一个受限制的位置。我确实将它更改为ifstream和ofstream的长路径名,但仍然没有骰子;我也不能在u上打开它p使用管理员时,windows抛出错误