2017-07-15 75 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(); Ø更好,如果你使用的處置文件使用條款..

相關問題