2015-04-17 1 views
0

J'ai eu le code suivant dispersé tout au long de mon programme. Cependant, je semble toujours avoir l'erreur ci-dessous. Même si j'utilise un «crochet» pour disposer de ressources, je ne sais toujours pas pourquoi cela se produit.Comment "Unaccess" un fichier afin que d'autres parties du programme peuvent y accéder

Erreur:

The Process cannot access the file "the file path" because it is being used by another process.

code:

string folderpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "AGoogleHistory"); 
string filecreate; 


private void restoreTbasToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    using(StreamReader sr = new StreamReader(filecreate)) 
    { 
     string s = sr.ReadToEnd(); 
     MessageBox.Show(s, "History", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
} 

try 
{ 
    browser.Navigate(new Uri(Address)); 
    using(StreamWriter sw = new StreamWriter(filecreate)) 
    { 
     sw.WriteLine(Address); 
    } 
} 
catch(System.UriFormatException) 
{ 
    return; 
} 


private void clearToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Are You Sure", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) 
    { 
     File.Delete(filecreate); 
    } 
    else 
    { 

    } 
} 
+1

Votre image a été un lien vers la page d'accueil imgur. Je l'ai enlevé. S'il vous plaît ne pas poster des images d'erreurs de toute façon, juste du texte, s'il vous plaît. – Blorgbeard

Répondre

0

Je pense que vous devriez d'abord vérifier que le fichier est EXISTE ou non par

File.Exists(filePath); 

deuxième chose que vous passez le paramètre erroné de StreamReader classe qui est une chaîne vide car vous ne lui avez rien assigné. Vérifiez les choses mentionnées ci-dessus d'abord et vous pouvez consulter ci-dessous le lien pour votre facilité:

The process cannot access file...

Faites-moi savoir si vous avez une autre question après avoir essayé cela. StreamReader, par défaut, verrouille le fichier.

0

Cela provoque l'erreur que vous voyez. Heureusement, StreamReader accepte un flux comme l'une de ses surcharges pour son constructeur. Cela vous permet de créer d'abord un FileStream, qui possède une énumération pratique vous permettant de spécifier le partage en lecture/écriture, puis de passer ce FileStream à votre StreamReader pour l'utiliser.

Donc dans votre cas:

using(StreamReader sr = new StreamReader(filecreate)) 
... 

devient:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite); 
using(StreamReader sr = new StreamReader(fs)) 
... 

Pour plus d'informations, reportez-vous à la question ci-dessous. C'est essentiellement la même question, posée différemment. La réponse acceptée devrait expliquer un peu plus.

How to open a StreamReader in ShareDenyWrite mode?

EDIT

Donnant sur votre question, je vois cette partie de votre problème est que vous ne fermez pas vos flux. Ils devraient se fermer lorsque le utilisant des sorties de bloc, mais il est préférable pratique pour les fermer vous-même avec sr.Close();

En outre, vous devrez peut-être ajouter le drapeau de suppression à l'option fileshare:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite|FileShare.Delete); 
using(StreamReader sr = new StreamReader(fs)) 
...