2017-03-03 167 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