Comment faire pour déplacer des fichiers qui sont actuellement en cours d'utilisation

Traductions disponibles Traductions disponibles
Numéro d'article: 140570 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Parfois les applications Win32 doivent supprimer, renommer ou déplacer des fichiers qui sont actuellement utilisés par le système. Un exemple courant est que les programmes d'installation doivent supprimer eux-mêmes à partir du disque dur de l'utilisateur lorsqu'ils ont fini de configurer un package de logiciels. Parfois, ils doivent également déplacer des pilotes de périphérique actuellement utilisés par le système. Applications besoin d'aide à partir du système d'exploitation pour supprimer ou déplacer ces fichiers.

Windows 95 et Windows NT chacun fournissent une méthode unique pour aider les applications à supprimer, remplacer ou renommer des fichiers et répertoires qui sont en cours d'utilisation. Bien que les deux plates-formes diffèrent dans la façon dont elles implémentent ces méthodes, les deux partagent une stratégie globale où l'application spécifie les fichiers à traiter et le système traite les lorsqu'il redémarre. Cet article explique comment les applications peuvent utiliser la méthode fournie par chaque plate-forme Windows.

Plus d'informations

Déplacement de fichiers dans Windows NT

Applications Win32 qui s'exécutent sur Windows NT doivent utiliser MoveFileEx() avec l'indicateur MOVEFILE_DELAY_UNTIL_REBOOT pour déplacer, remplacer ou supprimer des fichiers et répertoires en cours d'utilisation. La prochaine fois que le système est redémarré, le programme de démarrage de Windows NT va déplacer, remplacer ou supprimer les fichiers et répertoires spécifiés.

Pour déplacer ou remplacer un fichier ou un répertoire est en cours d'utilisation, une application doit spécifier le chemin d'accès à la fois une source et destination sur le même volume (par exemple, le lecteur C:). Si le chemin d'accès de destination est un fichier existant, il sera remplacé. Si le chemin d'accès de destination est un répertoire existant, il ne sera pas remplacé et chemins d'accès source et de destination reste inchangées. Voici un appel d'exemple pour déplacer ou de remplacer un fichier ou de déplacer un répertoire :
   // Move szSrcFile to szDstFile next time system is rebooted
   MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);
				
pour supprimer un fichier ou un répertoire, l'application doit définir le chemin d'accès de destination à la valeur NULL. Si le chemin d'accès à la source est un répertoire, elle sera supprimée uniquement s'il est vide. Notez que si vous devez utiliser MoveFileEx() pour supprimer des fichiers à partir d'un répertoire, vous devez redémarrer l'ordinateur avant d'appeler MoveFileEx() pour supprimer le répertoire. Voici un exemple de comment faire pour supprimer un fichier ou un répertoire de vider :
   // Delete szSrcFile next time system is rebooted
   MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
				

Déplacement de fichiers dans Windows 95

Windows 95 n'implémente pas MoveFileEx(), mais fournit une autre façon pour tous basés sur Win32, 16 bits Windows- et MS-DOS les applications à déplacer, remplacer, ou les fichiers de suppression (mais pas les répertoires) qui sont en cours d'utilisation. Cette fonctionnalité est implémentée par le biais de la section [rename] d'un fichier nommé Wininit.ini. Si Wininit.ini est présent dans le répertoire Windows, Wininit.exe traite lors du démarrage du système. Une fois Wininit.ini a été traité, Wininit.exe le renomme à Wininit.bak.

La syntaxe de la section [rename] est :
   DestinationFileName=SourceFileName
				
DestinationFileName et SourceFileName doivent résider sur le même volume et noms de fichier (8.3) court car Wininit.ini est traité avant que le système de disque en mode protégé est chargé et noms de fichiers longs ne sont disponibles que lorsque le système de disque en mode protégé est en cours d'exécution. Les fichiers source et destination spécifiées dans Wininit.ini avec noms de fichiers longs sont ignorés.

La section [rename] peut avoir plusieurs lignes avec un seul fichier par ligne. Pour supprimer un fichier, spécifiez NUL comme le DestinationFileName. Voici quelques exemples d'entrée :
   [rename]
   NUL=C:\TEMP.TXT
   C:\NEW_DIR\EXISTING.TXT=C:\EXISTING.TXT
   C:\NEW_DIR\NEWNAME.TXT=C:\OLDNAME.TXT
   C:\EXISTING.TXT=C:\TEMP\NEWFILE.TXT
				
la première ligne entraîne Temp.txt à supprimer. La seconde provoque Existing.txt être déplacés vers un nouveau répertoire. Le troisième provoque oldname.txt être déplacés et renommés. Le quatrième provoque un fichier existant à être écrasée par NewFile.txt.

Les applications doivent utiliser pas WritePrivateProfileString() pour écrire des entrées dans la section [rename] car il peut y avoir plusieurs lignes avec la même DestinationFileName, surtout si DestinationFileName est «NUL». Au lieu de cela, ils doivent ajouter des entrées en analysant Wininit.ini et en ajoutant les entrées à la fin de la section [rename].

Remarque : Utilisez toujours une recherche qui ne respecte pas la casse pour analyser Wininit.ini parce que le titre de la section [rename] et les noms de fichiers à l'intérieur de celle-ci peut avoir n'importe quelle combinaison de lettres majuscules et minuscules.

Les applications qui utilisent Wininit.ini doivent vérifier son existence dans le répertoire Windows. Si Wininit.ini est présent, une autre application a écrit lui depuis le dernier redémarrage du système. L'application doit par conséquent, ouvrez-le et ajoutez des entrées à la section [rename]. Si Wininit.ini n'est pas présent, l'application doit créer et ajouter à la section [rename]. Cela garantit que les entrées à partir d'autres applications ne sont pas supprimées accidentellement par votre application.

Pour annuler une opération de changement de nom de fichier avant le redémarrage du système, vous devez supprimer la ligne correspondante de la section [rename] du fichier Wininit.ini.

Propriétés

Numéro d'article: 140570 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 4.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Win32 Application Programming Interface sur le système suivant
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows XP
Mots-clés : 
kbmt kbapi kbfileio kbhowto kbkernbase kbprogramming KB140570 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 140570
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com