IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus
    Bonjour à tous,

    j'ai un problème de IOException

    J´ai écrit un programme afin d´extraire des fichiers (des dossiers d´extension zip que je crée) vers un autre dossier.
    Quand je compile mon code ce dernier fonctionne bien à condition de neprocéder qu´a une extraction. Au-dela, survient l´erreur

    "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus ".

    En mode step by step, il arrive à extraire deux fois et même plus.

    J´aimerai pouvoir créer autant de dossier que je veux et qu´il les extrait sans erreurs.
    J´ai essayé le try-catch, try-catch-finally, le using.
    Etant donné que using implemente IDisposable, Dispoose() n´est pas applicable dans mon code car n´apporte rien. J´ai pensé à Close(), mais il n´est pas également applicable ici.
    mon code pour plus d´appréciation de mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     using (ZipArchive archive = ZipFile.OpenRead(e.FullPath))
                    {
                        foreach (ZipArchiveEntry entry in archive.Entries)
                        {   
                            // Outputs relevant file information to the console
                            Console.WriteLine("File Name: {0}", entry.Name);
                            Console.WriteLine("File Size: {0} bytes", entry.Length);
                            Console.WriteLine("Compression Ratio: {0}", ((double)entry.CompressedLength / entry.Length).ToString("0.0%"));
                            //Identifies the destination file name and path
                            string ordnername = Path.GetFileNameWithoutExtension(e.FullPath);
                            //extract the files to the output folder in a safer manner
                            string ordnerPfad;
                            if (!File.Exists(ordnername))
                            {
                                //Calculates what the new full path for the unzipped file should be
                                ordnerPfad = Path.Combine(ConfigurationManager.AppSettings["ExtraktionPath"], ordnername);
                                //Creates the directory (if it doesn't exist) for the new path
                                Directory.CreateDirectory(ordnerPfad);
                                if (entry.FullName.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) |
                                    entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) |
                                    entry.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
                                //Extracts the file to (potentially new) path
                                entry.ExtractToFile(Path.Combine(ordnerPfad, entry.FullName));  
                            }                                     
                        }
    Merci d´avance pour vos suggestions

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur C#/C++
    Inscrit en
    Décembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur C#/C++
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 18
    Points : 38
    Points
    38
    Par défaut
    Bonjour #ericksson

    Le peux nous donner le retour de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try {
      // TODO
    }
    catch (System.IO.IOException  e)
    {
      Console.Out.WriteLine(e.Message + "\n\nStackTrace : " + e.StackTrace + "\n\nInnerException :" + e.InnerException);
    }
    Le problème c'est de savoir qu'elle est la/les ressources que tu verrouilles involontairement.

    Cordialement.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Bonjour Girakith,

    merci pour ta prompte reaction. Après utilisation du try-catch bloc, l´erreur suivante survient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     Le processus ne peut pas accéder au fichier "C:\Dossier\Test - Copie (2).zip", car il est utilisé par un autre processus. 
     
    StackTrace :  
     
      à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
     
       à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access,Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions
    	options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
     
       à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,FileShare share)
     
       à System.IO.File.Open(String path, FileMode mode, FileAccess access, FileShare share)
     
       à System.IO.Compression.ZipFile.Open(String archiveFileName, ZipArchiveMode mode, Encoding entryNameEncoding)
     
       à System.IO.Compression.ZipFile.OpenRead(String archiveFileName)
     
       à WatcherFile.Program.watcher_FileCreated(Object sender, FileSystemEventArgs e) in c:\Users\Visual Studio 2013\Projects\WatcherFile\Program.cs:Ligne 106.
     
    InnerException :

    un Petit rappel:
    au départ j´ai un fichier zip dans le dossier "Dossier". Quand j´en fais une copie, dans le fichier "Dossier", un nouveau dossier portant le nom du fichier copié est crée avec le fichier dézippé vers le dossier "Destination" et je visualise toutt ceci sur la console.

    Le blocage intervient quand je copie le fichier zip une seconde fois; car le dossier "Destination" ne crée pas de nouveau fichier dézippé.

    Merci d´avance pour tout!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Je pense que cela vient de la copie de fichier.
    Est-ce que tu peux nous montrer comment tu copies tes fichiers zip ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Bonjour Tidodo,

    l´erreur survient lors de l´appel "Openread" pour la seconde fois. En mode step by step, il est facilement identifiable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ZipArchive archive = ZipFile.OpenRead(e.FullPath)
    une fois le Programme exécuté, avec (Ctrl + C) et ensuite (Ctrl + V) je copie le fichier zip vers le même dossier "Dossier" et sur la console je recois le message de la creation du fichier "fichier-kopie.zip"et du détail de son contenu.

    Parallelement à la copie , j´ai un nouveau dossier qui est crée portant le nom du fichier copié sans Extension et contenant les documents qui étaient dans le fichier zippé.

    Le Probleme est que cette opération n´est effectuable qu´une fois et à la seconde tentative, le fichier zip est crée mais dans le dossier des fichiers dézippé, rien n´y est et la console renvoie le message: "Le processus ne peut pas accéder au fichier "C:\Dossier\Test - Copie (2).zip", car il est utilisé par un autre processus"

    Pour infos, j´utilise le FileSystemWatcher pour observer les changements qui s´opèrent au Niveau du dossier.

    Merci d´avance!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Est-ce que tu peux tenter avec FileStream.Unlock ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/01/2014, 08h15
  2. Réponses: 6
    Dernier message: 25/05/2012, 21h56
  3. Réponses: 18
    Dernier message: 29/10/2009, 00h17
  4. Réponses: 22
    Dernier message: 02/10/2009, 11h31
  5. Erreur : Le processus ne peut pas accéder au fichier
    Par victor72 dans le forum Dev-C++
    Réponses: 1
    Dernier message: 16/03/2007, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo