C++ Can';t读入一个.dat文件以创建第二个.dat文件
尝试使用while循环读取一个文件(称为“Stocks.dat”,我使用while循环的原因是,将来可能会追加X个数量的股票;下面列出了.dat文件的格式)以创建第二个文件“profits.dat”,其中包含“Stocks.dat”的信息,但有新的计算浮动。这个运行得很好,但是当我检查是否存在“profits.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>
#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抛出错误