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 :

Copier un fichier bloqué car en cours d'utilisation.


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut Copier un fichier bloqué car en cours d'utilisation.
    Bonjour,

    Je doit copier des fichier et parfois il sont encore utilisés par une application (par exemple des fichiers temporaires)
    Du coup, j'ai un message d'erreur :
    "... because it is being used by another process."

    Auriez vous un code qui permet de copier un fichier même si il est bloqué par une autre application.

    Merci par avance pour votre aide.

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Si le fichier est locké en exclusif, c'est géré par le système d'exploitation, on ne peut le contourner.

    Le mieux que tu peux faire est de garder une liste des fichiers qui ont échoué à la copie, et de ré-essayer après un laps de temps de le copier à nouveau.

    Tu devrais aussi lire les cours C# pour ta formation, c'est des tutoriels gratuit pour la programmation : http://dotnet.developpez.com/cours/?page=csharp
    A ne pas confondre avec les cours pour apprendre le langage C.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bonjour neptune,

    Je te remercie pour ta réponse, mais le fichier temporaire est effacé à la fin par l'application qui le créé, donc je peux pas le copier à ce moment.

    Ce que je veux, c'est faire une copie en cours d'utilisation de ce fichier.

    Il doit bien y avoir un moyen.
    (Peut être autrement que en C#)

    Merci par avance

  4. #4
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par neptune Voir le message
    Si le fichier est locké en exclusif, c'est géré par le système d'exploitation, on ne peut le contourner.

    Le mieux que tu peux faire est de garder une liste des fichiers qui ont échoué à la copie, et de ré-essayer après un laps de temps de le copier à nouveau.
    J'ai pas une meilleure idée!

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par fally Voir le message
    J'ai pas une meilleure idée!
    Désolé, mais comme je l'ai dit au dessus.

    Le fichier temporaire sera effacé et moi je veux le copier avant qu'il disparaisse.

    Avez vous une idée de comment sont programmé les logiciels qui delock les fichiers ?

    @+

  6. #6
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Oups! nos posts se sont croisés! et si tu arrètes le process un moment le temps de copier ces fichiers et tu relances apres?

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Bonsoir,

    Citation Envoyé par rgesnot Voir le message
    Avez vous une idée de comment sont programmé les logiciels qui delock les fichiers ?
    La classe Stream et classes dérivées manipulent des ressources non managées donc elles utilisent le système de fichier du système d'exploitation. Lorsqu'un programme accède à un fichier, Windows se charge d'empêcher tout autre programme d'y accèder.

    Si tu veux éviter de déclencher une exception lorsque le fichier temporaire est supprimé, tu peux utiliser la classe FileSystemWatcher pour surveiller l'état d'un dossier (lorsque qu'un fichier présent dans le répertoire est modifié, supprimé ou créé).

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par fally Voir le message
    Oups! nos posts se sont croisés! et si tu arrètes le process un moment le temps de copier ces fichiers et tu relances apres?
    C'est une piste, mais comme c'est un fichier temporaire, j'ai peur qu'il disparaise.

    Tu as un lien vers un exemple de code concernant la détection et le traitement des des process ?

    Merci

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Bonsoir,


    La classe Stream et classes dérivées manipulent des ressources non managées donc elles utilisent le système de fichier du système d'exploitation. Lorsqu'un programme accède à un fichier, Windows se charge d'empêcher tout autre programme d'y accèder.

    Si tu veux éviter de déclencher une exception lorsque le fichier temporaire est supprimé, tu peux utiliser la classe FileSystemWatcher pour surveiller l'état d'un dossier (lorsque qu'un fichier présent dans le répertoire est modifié, supprimé ou créé).
    Bonsoir,

    J'avais regardé cette classe pour surveiller la création du fichier, mais je veux pas savoir quand il disparait, mais le copier alors qu'il est en cours d'utilisation.

    Donc je cherche les différentes solutions qui s'offrent à moi.

    Merci

  10. #10
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par rgesnot Voir le message
    Bonsoir,

    J'avais regardé cette classe pour surveiller la création du fichier, mais je veux pas savoir quand il disparait, mais le copier alors qu'il est en cours d'utilisation.

    Donc je cherche les différentes solutions qui s'offrent à moi.

    Merci
    Ce que tu ne sembles pas vouloir comprendre c'est que si le process qui créé le fichier l'ouvre en mode read exclusif tu ne pourras pas le lire, c'est locké au niveau OS.

    Une solution qui pourrait s'offrir à toi est la suivante: si tu peux paramétrer l'endroit où les fichiers temporaires vont être créés et que tu indiquer un partage réseau, et que tu peux modifier les droits sur le répertoire partagés pour autoriser la création, lecture et écriture de fichier mais pas l'effacement; tu as une solution, bancale, mais bon...

  11. #11
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par rgesnot Voir le message
    C'est une piste, mais comme c'est un fichier temporaire, j'ai peur qu'il disparaise.
    Tu as un lien vers un exemple de code concernant la détection et le traitement des des process ?
    Merci
    j'ai pas de lien mais je pense qu'on peut arreter un process pendant un moment! selon ton explication les fichiers ne vont pas disparaitre puisque c'est le process en question qui les supprime apres! celà te donne le temps de les copier et de relancer le program apres

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Moi il y a quelque chose qui m'embête dans ce que vous dite.
    La lecture, la suppression, le déplacement sont bien empêchés par windows lorsque le fichier est en cours d'utilisation.
    Mais pour moi la copie a toujours était autorisé.
    Essayé avec une vidéo (je ne connais pas de fichier plus en cours d'utilisatio qu'une video), lancé la et lancé une copie. Pas de problème pour windows ....
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par fally Voir le message
    j'ai pas de lien mais je pense qu'on peut arreter un process pendant un moment! selon ton explication les fichiers ne vont pas disparaitre puisque c'est le process en question qui les supprime apres! celà te donne le temps de les copier et de relancer le program apres
    Un process peut en effet être suspendu, maintenant je ne sais pas si la classe process gère cela, elle n'informe déjà pas sur les PPID alors faudrait pas trop lui en demander !!!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  14. #14
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Mais pour moi la copie a toujours était autorisé.
    Ca depend comment le fichier à été ouvert, quelque soit le language, essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static void Main(string[] args)
            {
                FileStream fs = File.Open("text.txt", FileMode.CreateNew, FileAccess.Write, FileShare.None);
     
                byte[] buffer = Encoding.Default.GetBytes("Hello, world!");
                fs.Write(buffer, 0, buffer.Length);
                fs.Flush();
     
                Console.WriteLine("Try to copy... and press any key.");
                Console.Read();
     
                fs.Close();
            }

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    En effet, cela ne fonctionne pas.

    Bah alors en dehors de courcircuiter le système d'exploitation, d'aller lire la table des fichiers sur le disque dur, de repérer le bon fichier, de répérer tous les secteurs où se trouve le fichier, de créer un nouveau fichier, de copié ces secteurs dans les secteurs associés au nouveau fichier, puis de lire le fichier, je ne vois pas autrement
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  16. #16
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par ced600 Voir le message
    En effet, cela ne fonctionne pas.

    Bah alors en dehors de courcircuiter le système d'exploitation, d'aller lire la table des fichiers sur le disque dur, de repérer le bon fichier, de répérer tous les secteurs où se trouve le fichier, de créer un nouveau fichier, de copié ces secteurs dans les secteurs associés au nouveau fichier, puis de lire le fichier, je ne vois pas autrement
    Et encore, tu n'auras jamais le fichier au complet à cause de la bufferisation et du facteur de blocage, etc.

    Je pense que si on veut aider l'auteur de la question, il nous faudra plus d'informations sur le process qui créé les fichiers temporaires et les efface.

  17. #17
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Moi il y a quelque chose qui m'embête dans ce que vous dite.
    La lecture, la suppression, le déplacement sont bien empêchés par windows lorsque le fichier est en cours d'utilisation.
    Mais pour moi la copie a toujours était autorisé.
    Essayé avec une vidéo (je ne connais pas de fichier plus en cours d'utilisatio qu'une video), lancé la et lancé une copie. Pas de problème pour windows ....
    Et pourtant il y a des fichiers qu'on arrive pas à copier ( .mdf etc...)!
    Peut etre faudra til que l'intéressé nous parle de quel fichier il s'agit et de quel programme.
    merci

  18. #18
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Quoi qu'il en soit, comme je l'ai déjà dit, c'est au niveau du système d'exploitation, et j'ai beau chercher, je n'ai pas trouvé comment détourner le lock sur le fichier, a part fermer le handle, mais c'est vraiment pas la bonne idée.

    Et finalement, tant mieux, pensez vous que vous seriez d'accord que l'on puisse accéder à un fichier alors que vous avez spécifiquement demandé de l'ouvrir en mode exclusif?

    Il nous faut vraiment plus d'informations pour continuer sur le process qui créé les fichiers, pourquoi il les créé et surtout pourquoi l'auteur de la question souhaite "détourner" les fichiers temporaires...

  19. #19
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Désolé, je travaille sur plusieurs projets en même temps et j'avais pas eu le temps de lire vos réponses.

    Tout d'abord, merci de vous pencher sur ce défi.

    Pour information, il y a un logiciel gratuit, mais pas libre qui fait très bien cela :
    Unlocker : http://ccollomb.free.fr/unlocker/

    Il n'est pas écrit en C#, mais en C d'après ce que j'ai cru en déduire d'une étude un peu plus poussée

    Si ce logiciel le fait, c'est que c'est faisable.

    Pour le reste, je te répond par MP

  20. #20
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par rgesnot Voir le message
    Si ce logiciel le fait, c'est que c'est faisable.

    Pour le reste, je te répond par MP
    Je vais jetter un oeil à ca. Mais évite le MP, ca pourrait intéresser d'autres personnes dans le futur.

    A vu de nez, ce que ce logiciel fait, il ferme le handle (ton process qui créé le fichier se plantera), ou il reset le lock flag une si l'application qui l'a créée s'est planté ou n'a pas fermé le fichier.

    Bref, à tester, mais je maintiens ce que je connais d'un OS, tant que le process vivrera, sans hacker l'OS, tu releaseras pas le lock.

    Mais cette discution reste intéressante.

Discussions similaires

  1. Savoir si un fichier est déjà en cours d'utilisation
    Par Annaced dans le forum Débuter
    Réponses: 1
    Dernier message: 01/09/2010, 09h41
  2. Copier les fichiers de la base de donnée utilisée
    Par psychosiffleur dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/03/2010, 15h42
  3. Réponses: 1
    Dernier message: 22/12/2009, 23h23
  4. Copier un fichier bloqué
    Par upkanet dans le forum Windows
    Réponses: 5
    Dernier message: 08/02/2009, 09h34
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29

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