2017-07-15 15 views
0

私のプログラムが行File.Delete("upv/version.txt");を読み込んだときにこのエラーが発生しましたが、どこに問題があるのか​​解決する方法がわかりません。誰かが私を助けることができますか?プロセスはファイルにアクセスできません

System.IO.IOException:C「プロセスはファイルにアクセスできません ':それはですので\ UPV \ ' version.txtをデバッグ\ \ユーザーは、XXX \ソースを\ \ reposの\ WpfApp1 \ WpfApp1 \ binが別のプロセスで使用されています。

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

するたびにフラッシュされますとあなたはを使用してを使用した場合のStreamWriterインスタンスを閉じる必要はありません。 ** StreamReader **または** StreamWriter **呼び出し** Dispose **を使用して特定のインスタンスを閉じます。エラーが再び発生することはありません –

答えて

0

..あなたは、ファイルを配置のために使用して句を使用する場合は、O、より良いです。あなたのケースでは

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

そして

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

編集:それは自動的に

+0

ありがとう!すべてがうまくいきました。 – Dominic

+0

私はあなたを助けることができてうれしい。ちょうどヒントとして。読み書き操作にFileクラスを使用する場合、Dispose/Close呼び出しを行う必要はありません。デフォルトでは静的なので、インスタンスを作成しなくても直接呼び出すことができます。 –

0

はあなたがVerifyVersion方法でファイルを読み込むときに..ファイルを配置する必要があります。 VersionReader.Close();を配置する必要があります。あなたはStreamReaderをまたはのStreamWriterその特定のインスタンスを閉じるために、あなたは再びエラーが起こって見つけることができません処分を呼んでくださいを使用しているときはいつでも

関連する問題