Question Comment Vim et Windows peuvent-ils voir deux fichiers différents portant le même nom dans le répertoire Program Files


Je vois une interaction étrange entre vim, les outils Cygwin et Windows7. Je ne pense pas que ce soit un bug, mais en même temps, je ne sais pas comment expliquer ce que je vois.

J'ai installé Vim (à partir de vim.org, pas Cygwin vim) dans:

"C:\Program Files (x86)\Vim".

J'ai accédé à ce répertoire et modifié mon fichier _vimrc en utilisant vim lui-même.

vim _vimrc

J'ai ajouté des paramètres, écrit le fichier et quitté.

J'ai ensuite copié le fichier dans un autre répertoire pour créer une sauvegarde de mes modifications.

copy _vimrc c:\tmp

C'est quand j'ai remarqué le problème. La copie du fichier a fait ne pas contenir mes modifications. Beaucoup de recherches ont suivi. Je vais résumer les conclusions.

Dans "C: \ Program Files (x86) \ Vim", je vois mes modifications si j'inspecte le fichier avec l'un des éléments suivants:

vim, cat, less

(Ici, cat et less sont les versions de Cygwin.)

Cependant, je ne vois pas mes modifications si j'inspecte le fichier avec l'un des éléments suivants:

notepad, type, more

(Les commandes de type et plus sont des commandes standard du shell Windows.)

Pour vous donner une saveur:

c:\Program Files (x86)\Vim>ls -l _vimrc
-rwx------+ 1 carlx Domain Users 936 Dec 23 21:15 _vimrc

c:\Program Files (x86)\Vim>dir _vimrc
 Volume in drive C is OSDisk
 Volume Serial Number is 6C86-85EB

 Directory of c:\Program Files (x86)\Vim

06/28/2011  02:09 PM               901 _vimrc
               1 File(s)            901 bytes
               0 Dir(s)  95,964,721,152 bytes free

La commande Cygwin ls affiche un fichier différent (date et taille différentes) que la commande dir Windows.

Je pensais que c'était peut-être une sorte de problème avec le casse du nom de fichier, mais spécifier _VIMRC par rapport à _vimrc à l'une de ces commandes ne fait aucune différence.

Quelqu'un peut-il expliquer ce que je vois ici?


6
2017-12-25 03:26


origine


Ceci est probablement la virtualisation du système de fichiers.
S'il s'agit d'un problème de virtualisation, vous trouverez le fichier modifié dans les fichiers c: \ users \ <youraccoutname> \ appdata \ local \ virtualstore \ program (86) - kreemoweet
Sensationnel. Vous avez raison, kreemoweet. J'ai regardé dans le répertoire que vous avez spécifié et le fichier modifié est là. C'est vraiment étrange pour moi. Savez-vous où je lis plus sur la virtualisation du système de fichiers de Windows? Merci! - Carl Parker
@kreemoweet - Vous devriez poster ce commentaire comme une réponse. - Nifle


Réponses:


Comme Raymond Chen et @kreemoweet l’ont souligné plus haut, cela est dû à virtualisation du système de fichiers. Pour désactiver cette option, vous pouvez utiliser l'éditeur de stratégie de groupe local, gpedit.msc. Type start gpedit.msc dans une invite de commande et accédez à Configuration ordinateur> Paramètres Windows> Paramètres de sécurité> Stratégies locales> Options de sécurité. Faites défiler vers le bas de la fenêtre de droite et double-cliquez sur User Account Control: Virtualize file and registry write failures to per-user locations. Changez le paramètre de Enabled à Disabled.


3
2018-05-16 17:44



Notez que la virtualisation du système de fichiers étant une mesure de compatibilité, sa désactivation peut casser certaines applications héritées. - Harry Johnston


Le système de fichiers NTFS généralement utilisé par Windows prend en charge plusieurs fichiers portant le même nom, qui ne diffèrent que par les cas, dans le cadre des efforts de Windows en faveur de la conformité POSIX. Des détails supplémentaires sont disponibles à http://support.microsoft.com/kb/100625 . Cependant, toutes les applications Windows (et probablement la plupart de ses API) et celles fournies par Windows empêchent cela.

Si probable, vous avez les deux _vimrc et _VIMRC existant en même temps - et l’API standard ne vous en montre qu’une seule (pas sûr de la logique utilisée pour choisir laquelle). J'allais dire que vim doit utiliser une API non standard ou l'appeler avec une option non standard pour obtenir ce que vous observez, mais je ne peux pas sembler le reproduire uniquement avec vim. Je considérerais cela comme un bogue dans Cygwin, vim, copy, ou quoi que ce soit qui a abouti à cette situation - ce qui apporte un bon point - avez-vous réellement utilisé copy (n'existe pas dans Cygwin) ou cp?

S'il vous plaît vérifier aussi http://www.cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive. Il existe un paramètre de registre à vérifier, qui ne se limite même pas à Cygwin.


0
2017-12-25 03:34



La commande Windows Copy est ce que j'ai initialement utilisé pour copier le fichier et qui a abouti à la "copie" sans modifications. Si j'utilise la commande cp (de Cygwin), je peux copier le fichier (avec modifications) dans un répertoire différent.
@ CarlParker - s'il vous plaît vérifier également le lien vers la documentation Cygwin que je viens d'ajouter à la réponse. - ziesemer
Qu'est-ce qui se passe ici avec toutes les restrictions - pour les deux réponses? - ziesemer
Je ne sais pas ce que sont les votes négatifs. Bien que votre réponse ne soit pas la réponse au mystère, elle était toujours utile et je vous remercie de votre réponse. (Et similaire à @Paul Betts, ci-dessus.) - Carl Parker


Que se passe-t-il si vous courez C:\Windows\SysWOW64\cmd.exe's dir? Je parie que vous êtes WOW64 File Redirected.


0
2017-12-25 04:58



Merci. Sous les c: \ windows \ SysWow64 \ cmd.exe, dir et ls signalent toujours différentes dates et tailles pour le fichier. - Carl Parker
Les dossiers Program Files ne sont pas soumis à la redirection WOW64. - Harry Johnston
@ PaulBetts: référence, s'il vous plaît. Cet article MSDN sur la redirection de fichiers ne mentionne que le dossier system32: msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29 - Harry Johnston
De plus, je viens de l'essayer. En utilisant le fichier cmd.exe 32 bits, j'ai regardé dans c: \ windows \ system32 et j'ai vu le contenu de c: \ windows \ syswow64 comme prévu. Regarder dans c: \ Program Files, cependant, fait ne pas affiche le contenu de c: \ Program Files (x86). - Harry Johnston
@HarryJohnston En effet, la page MSDN Library à msdn.microsoft.com/en-us/library/bb756960.aspx semble impliquer que toute écriture dans un dossier peut potentiellement être redirigée par la virtualisation du système de fichiers. - Fran


Comme Raymond Chen et @kreemoweet le supposaient dans leurs commentaires, il s’agissait d’un problème de virtualisation de système de fichiers, et j’ai trouvé le fichier dans:

c:\users\<youraccoutname>\appdata\local\virtualstore\program files(86)

Et c'était la réponse. Merci les gars.


0
2017-12-19 15:34