2016-11-28 137 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它会更可靠。 –