2015-04-16 200 views
0

我有一個與ofstream的問題,它不會打開我的文件寫入無論我做什麼。我有一種感覺,那是因爲我正在使用DirectXApp或Windows許可,但當打開文件時ifstream工作得很好。Ofstream無法打開或創建文件

基本上我爲一個項目製作了一個Breakout的簡單克隆,我想將高分保存到一個.txt文件中,以便在下次播放時再次加載它,並且如果分數較高而不是最初的高分,而是將其寫入文件以取代最初的高分。

// included files 
#include "pch.h" 
#include "GameManager.h" 
#include <iostream> 
#include <sstream> 

void GameManager::saveHighScore(int newHighScore) // File saving not working!!! 
{ 
    std::string FilePath = "Assets/HighScore.txt"; 
    std::ofstream File(FilePath.c_str(), std::ios::out | std::ios::trunc); 
    if (File.is_open()) { // File is never opened 
     File << newHighScore; 
     File.flush(); 
     File.close(); 
    } 
} 

我試過下面的東西,至今沒有奏效:

  • 保證了文件路徑存在(這是一樣的我ifstream的,其內容是罰款)

  • 已經創建文件,並檢查Visual Studio屬性(內容:是類型:文本)

  • 修改所有Windows權限,以確保文件不是隻讀的,我有Full Co對文件的控制權限
  • 以管理員模式運行Visual Studio並確保我擁有對Visual Studio的完全控制權限
  • 創建了一個控制檯應用程序並在其中進行了測試,並且工作得很好。

我一直在尋找一個小時的解決方案,我不知道它可能是什麼,有什麼建議嗎?

+0

實際上你的距離是否在你的源代碼中?我不認爲它會編譯,如果它是 – dwcanillas

+3

我的猜測是,您的應用程序的工作目錄不是可執行文件的輸出目錄,所以您的相對路徑不正確。您可能想將其更改爲$(OutDir)而不是默認的$(ProjectDir) – Borgleader

+0

您需要檢查相同的應用程序是否未將文件阻塞(例如:您所說的ifstream)。或者推薦工作目錄已被應用程序更改。 – NetVipeC

回答

0

保證了文件路徑存在(這是一樣的我ifstream的,其內容是罰款)

你不相信我的這一點,特別是是相對路徑。

你會發現該文件的相對於目前的工作目錄啓動你的程序的shell,而不是從你的程序編譯的源文件,甚至從可執行文件本身的位置。

默認情況下,從IDE啓動時,工作目錄是項目文件(.vcxproj)的位置,但是it is possible to change this in a setting

+0

它在控制檯應用程序項目上工作正常,似乎我的代碼只是不想在DirectX應用程序項目上工作。 –

相關問題