2017-07-15 38 views
0

我的程序读取File.Delete("upv/version.txt");行时出现此错误,但我不知道问题出在哪里以及如何解决。有人能帮助我吗?该进程无法访问文件

System.IO.IOException:“的过程不能访问该文件 'C:\用户\ XXX \源\回购\ WpfApp1 \ WpfApp1 \ BIN \调试\ UPV \ version.txt' ,因为它是被另一个进程使用。'

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Net; 
using System.IO; 
using System.ComponentModel; 

namespace WpfApp1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      btnPlay.IsEnabled = false; 

      if (VerifyVersion()) 
       btnPlay.IsEnabled = true; 
      else 

       Download("http://localhost/","text.rar"); 

     } 

     private void btnPlay_Click(object sender, RoutedEventArgs e) 
     { 
      System.Diagnostics.Process.Start("Game.exe"); 
     } 

     private void ProgressBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
     { 

     } 

     private string VersionActuelle; 

       private bool VerifyVersion() 
     { 
      StreamReader VersionReader = new StreamReader("upv/version.txt"); 
      string VersionClient = VersionReader.ReadToEnd(); 

      VersionClient = VersionClient.Replace(System.Environment.NewLine, string.Empty); 

      VersionActuelle = ReadRemoteTextFile("http://localhost/upv/version.txt"); 

      VersionActuelle = VersionActuelle.Replace(System.Environment.NewLine, string.Empty); 

      if (VersionActuelle == VersionClient) 
       return true; 
      else 
       return false; 
     } 

     private string ReadRemoteTextFile(string Url) 
     { 
      Uri uri = new Uri(Url); 

      WebRequest wRequest = WebRequest.Create(uri); 

      WebResponse wResponse = wRequest.GetResponse(); 

      Stream ResponseStream = wResponse.GetResponseStream(); 

      StreamReader sReader = new StreamReader(ResponseStream); 

      string Temp = sReader.ReadToEnd(); 

      return Temp; 
     } 

     private void Download(string Url, string DownloadTo) 
     { 
      WebClient wClient = new WebClient(); 


      wClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(UpdateProgressChange); 


      wClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(UpdateDone); 


      wClient.DownloadFileAsync(new Uri(Url), DownloadTo); 


     } 

     private void UpdateProgressChange(object sender, DownloadProgressChangedEventArgs e) 
     { 
      progressBar.Value = e.ProgressPercentage; 
     } 

     private void UpdateDone(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
     { 
      //MessageBox.Show("Mise à jour terminée! Vous pouvez désormais jouer.", "Notification"); 
      btnPlay.IsEnabled = true; 

      File.Delete("upv/version.txt"); 

      using(System.IO.TextWriter sWriter = File.CreateText("upv/version.txt")) 
      { 
       sWriter.Write(VersionActuelle); 
      } 
     } 
    } 
} 
+0

每当你正在使用** StreamReader **或** StreamWriter **请调用** Dispose **关闭该特定实例,并且不会再次发生错误 –

回答

0

每当你使用的StreamReader的StreamWriter做电处置关闭特定的实例,你不会找到的错误再次发生。

在你的情况,

string VersionClient = VersionReader.ReadToEnd(); 
VersionReader.Dispose(); 

而且

StreamReader sReader = new StreamReader(ResponseStream); 
string Temp = sReader.ReadToEnd(); 
sReader.Dispose(); 

编辑:使用时,使用因为它会自动被刷新你并不需要关闭的StreamWriter实例

+0

谢谢!现在一切正常。 – Dominic

+0

很高兴我能帮助你。就像一个小费。如果使用File类进行读写操作,则不需要执行Dispose/Close调用。由于它们默认为静态,您可以直接调用它们而无需创建实例。 –

0

您需要配置文件..当你阅读的VerifyVersion方法的文件。你需要把一个VersionReader.Close(); Ø更好,如果你使用的处置文件使用条款..

相关问题