2016-11-28 140 views
0
我在與StreamWriter的問題

,這裏是我的代碼:StreamWriter的訪問被拒絕在Windows啓動時

WebClient versionDownloader = new WebClient(); 
versionDownloader.DownloadFile("/* Version file here */", "EHWVBVersion.txt"); 
StreamReader reader = new StreamReader("EHWVBVersion.txt"); 
if (Version.Parse(reader.ReadLine()) > version) 
{ 
    DialogResult dialogResult = MessageBox.Show("New version available ! Do you want to download it ?", "EHWVB", MessageBoxButtons.YesNo); 
    if (dialogResult == DialogResult.Yes) 
    { 
     reader.Close(); 
     File.Delete("EHWVBVersion.txt"); 
     Process.Start("/* Download link Here */"); 
     Application.Exit(); 
    } 
} 
reader.Close(); 
File.Delete("EHWVBVersion.txt"); 

(是的,有實際聯繫的,而不是在我的代碼中的註釋)

它給我一個錯誤提到訪問拒絕「C:\ WINDOWS \ System32 \ EHWVBVersion.txt」,即使我不在那裏。我猜想它不得不這樣做,有關臨時文件尚未加載的東西,所以我試圖打印之前提到的路徑,並試圖,而不是,它被加載。 於是我編碼此功能:

private void Log(string line) 
{ 
    if (!File.Exists("EHWVB.log")) 
     File.Create("EHWVB.log").Close(); 
    StreamWriter writer = new StreamWriter("EHWVB.log", true); 
    writer.WriteLine(DateTime.Now + " : " + line); 
    writer.Close(); 
} 

並試圖登錄這是訪問的版本文件的一切。 我很驚訝地發現,它不是我的版本文件,而是創建問題或路徑,但直接創建文件過程。同樣的錯誤,但這次是「C:\ WINDOWS \ System32 \ EHWVB.log」。

事情是,如果我再次嘗試所有這些不在Windows啓動,一切工作正常。版本文件被下載,記錄工程等。

任何想法?

+0

不能你只需給它的完整路徑,你想* *它把文件? –

+0

不,因爲我希望軟件能夠在任何地方工作。 – Exorion

+0

我認爲我發現了這個問題,這是因爲工作路徑,因爲它在Windows啓動時加載。我實際上正在測試一些用給定的-path參數改變當前路徑的代碼。 – Exorion

回答

0

我發現我的答案here

很抱歉的重複:3

+0

這不是一個好的答案。您應該創建一個絕對路徑,而不是假定/更改應用程序的當前目錄。例如'Path.Combine(myRootPathFromParam,「EHWVBVersion.txt」)' –

+0

給絕對路徑怎麼樣更好? – Exorion

+0

@Exorion它會更可靠。 –