Exception dans l'ouverture d'un fichier qui est déjà ouvert
Je suis la construction d'une application en C# qui-je ouvrir un fichier CSV pour lire des données à partir d'elle. J'obtiens une exception lorsque j'essaie d'ouvrir le fichier CSV à partir de C# lorsque ce fichier est déjà ouvert dans Excel. L'exception dit que le processus ne peut pas accéder au fichier car il est déjà ouvert. Comment puis-je résoudre ce problème et ouvrir le fichier, même si il est ouvert dans une autre application?
Grâce,
Rakesh.
s'il vous plaît poster un peu de code à nous montrer ce que vous avez fait jusqu'à présent
C'est le code: à l'aide de (FileStream fs = new FileStream(csvOpenFileDialog.Le Nom De Fichier, FileMode.Open, FileAccess.Read))
Il vous manque un argument. Lire ma réponse.
Vérifiez la réponse de Hans fournit ci-dessous. FileShare.Lire ne fonctionne pas si le fichier est déjà ouvert. FileShare.ReadWrite fonctionne.
C'est le code: à l'aide de (FileStream fs = new FileStream(csvOpenFileDialog.Le Nom De Fichier, FileMode.Open, FileAccess.Read))
Il vous manque un argument. Lire ma réponse.
Vérifiez la réponse de Hans fournit ci-dessous. FileShare.Lire ne fonctionne pas si le fichier est déjà ouvert. FileShare.ReadWrite fonctionne.
OriginalL'auteur Rakesh K | 2010-10-02
Vous devez vous connecter pour publier un commentaire.
J'ai été confronté à ce problème il y a quelque temps.
Il vous manque de l'
FileShare
paramètre. Sans préciser que, si vous ouvrez un fichier, il sera verrouillé exclusivement par votre application. Mais depuis qu'il a déjà été ouvert par Excel (ou toute autre application), vous recevrez une exception.Vous pouvez essayer d'utiliser cette - je pense que cela va être votre meilleur pari -
using (FileStream fs = File.Open(<file-path>, FileMode.Open, FileAccess.Read, FileShare.Read))
Ce code dit: Bonjour Excel! Si vous pouvez vous permettre (à lire, à ne pas jeter l'exception), je voudrais lire le fichier, mais je ne vais pas essayer de le posséder, et je sais que vous pouvez le modifier à tout moment.
Si cela déclenche une erreur, Excel a refusé même l'accès en lecture. Dommage alors!
Le meilleur de tous.
Pas sûr de ce que vous avez fait, mais.... sa bonne - ce qui fonctionne pour vous!
Utilisation FileShare.ReadWrite au lieu de FileShare.Lire, comme mentionné par Hans.
j'ai eu ce problème et l'
FileShare.ReadWrite
Fixe mon problème après un certain temps,seulement de remarquer que j'avais un autre à l'aide du bloc où j'ai appelé la méthode que j'ai obtenu à l'exception sur... afin de vérifier votre code, si vous avez ce problème... quelque chose est définitivement à l'aide du fichier...Merci! FileShare.ReadWrite fixe mon problème!
OriginalL'auteur Nayan
C'est possible, mais vous devez contrôler attentivement le partage de fichier que vous spécifiez. Le plus .NET les classes par défaut à FileShare.Lire, en niant un autre processus de l'écriture du fichier. Mais cela ne peut pas fonctionner si le fichier est ouvert par Excel, il a déjà gagné l'accès en écriture. Vous ne pouvez pas nier un droit qui est déjà acquis.
Pour résoudre le problème, effectuez votre code ressemble à ceci:
Notez l'utilisation de FileShare.ReadWrite. J'ai vérifié ce code fonctionne que si Excel eu de test.csv ouvert.
Méfiez-vous du potentiel de la difficulté à vous invitera à cela, des choses bizarres peuvent se produire lorsque Excel écrit dans le fichier comme vous le lisez. Vous aurez probablement lu des ordures, de la partie des anciennes données, une partie de la nouvelle, sans une bonne façon de diagnostiquer ce.
OriginalL'auteur Hans Passant
En raison de problèmes de concurrence, vous ne pouvez pas avoir la possibilité d'écrire à deux instances d'un même fichier. Il devrait être possible pour l'ouvrir en lecture seule, cela permettrait-il de ne pas être un problème de concurrence que la lecture est garanti d'être thread-safe. Cet article doit expliquer comment faire ce que j'ai proposé
OriginalL'auteur Woot4Moo
Ce n'est pas possible.
Un fichier peut être ouvert avec différents types de protection. Excel ouvre le fichier exclusivement, dans le but de protéger le fichier d'être modifié par un autre programme, puis est revenue en arrière quand Excel enregistre.
Excel pourraient avoir ouvert le fichier et a permis à la lecture, mais alors vous pourriez vous retrouver dans une situation de blocage où les deux applications ont ouvert le fichier pour la lecture, et l'un ne peut rien enregistrer le dos.
Cet article est au sujet de l'ouverture d'une feuille de calcul, pas un fichier CSV, et sur l'ouverture d'un fichier pour un accès en lecture seule, ne peut pas ouvrir un fichier qui est déjà ouvert en mode exclusif, donc, je suis désolé mais ce n'est pas pertinente du tout.
en fait, il est tout à fait pertinente. Si l'OP prend un coup d'oeil à l'ordre dans lequel les fichiers sont ouverts, vous pouvez avoir Excel ouvrez d'abord le fichier en Lecture Seule instance susceptible d'atténuer le problème
Oui, ce serait possible, mais l'article est à propos de l'API, de ne pas l'application Excel.
il a un exemple utiliser Excel...
OriginalL'auteur Guffa
Une autre solution, proposée par cette réponse, est de copier le fichier dans un fichier temporaire et ouvert que.
Utilisation
OriginalL'auteur David Sykes