2016-11-28 3 views
0
私はのStreamWriterとの問題を抱えている

は、ここに私のコードですWindowsの起動時に拒否されました:のStreamWriterアクセス​​

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もっと信頼できるでしょう。 –

関連する問題