Fichier C#.Existe renvoie la valeur false, le fichier n'existe pas

À l'aide de VS 15, C# avec .Net 4.5.2

L'ordinateur est sur un réseau PUBLICITAIRE, avec le nom de l'annonce "ANNONCE".

Ce problème se produit avec AD normal des droits d'utilisateur, ANNONCE les droits d'admin, et des droits d'administrateur local. Il n'a pas d'importance ce que les droits le programme obtient, le même problème se produit.

Notre fichier de test est "C:/windows/system32/conhost.exe".

Le fichier ci-dessus existe, il est très bien existant. Je peux le voir avec l'explorateur.

C'est le fichier dans l'explorateur:

Fichier C#.Existe renvoie la valeur false, le fichier n'existe pas

C'est le fichier de propriétés:

Fichier C#.Existe renvoie la valeur false, le fichier n'existe pas

Vous pouvez voir qu'il est là, à droite?

La suite de commande cmd vérifie si le fichier existe:

IF EXIST "C:\windows\system32\conhost.exe" (echo does exist) ELSE (echo doesnt exist)

Il retourne "existe" comme promis.

Le code C# suivant vérifie si le fichier existe:

FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");

Cela renvoie "Faux".

Ce code renvoie également "Faux":

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");

Ce code ne le trouve pas:

foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

Ce code ne le trouve pas:

foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

False, False, False:

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:\\windows\\system32\\conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:\windows\system32\conhost.exe") + "");

Ce que je fais mal?

Note: j'ai copié conhost à C:\conhost.exe et mon programme pouvez la trouver sans problème. Mon programme trouve également d'autres fichiers dans system32, tout simplement pas conhost et quelques autres. Par exemple, il trouve "connect.dll" ce qui est dans system32, il n'est donc pas le répertoire de l'autorisation de lecture.

Plus de notes supplémentaires: conhost.exe et connect.dll a les mêmes attributs de sécurité (onglet Sécurité dans les propriétés du fichier).

  • Avez-vous essayé de changer / d' \ peut-être?
  • Essayez File.Exists(@"C:\windows\system32\conhost.exe")
  • Yep, même résultat dans tous les tests dans les deux directions 🙁
  • 64 bits app et de la redirection peut-être...
  • Vous avez peut-être raison, je n'ai pas testé ce que 64bit encore.
  • pouvez-vous montrer "icacls c:\windows\system32\conhost.exe" et "whoami /groupes" de la même utilisateur qui exécute votre programme?
  • J'ai eu le même problème avec le Répertoire.il existe, msdn:"Si l'appelant n'a pas les autorisations suffisantes pour lire le fichier spécifié, aucune exception n'est levée et la méthode renvoie false indépendamment de l'existence d'un chemin.", a piraté avec la commande net use stackoverflow.com/a/15832359/891715
  • Trouvé la réponse, grâce à xanatos et Uladzimir Palekh, je vais mettre à jour ma question avec la réponse. Il n'avait rien à voir avec les autorisations 🙂
  • Les Questions sont là où vous posez votre question, non pas où vous postez votre réponse. Si vous souhaitez publier votre propre réponse, en plus des réponses fournies par les autres, alors il affichera comme une réponse. Si les réponses à apporter une réponse adéquate à la question, puis, bien sûr, il n'est pas nécessaire de le faire.
  • Je n'aime pas que vous avez retiré de la solution, même quand il est dans l'une des réponses.
  • Comme je l'ai dit, la question est de savoir où vous posez votre question, non pas où poster vos réponses. Les réponses n'appartiennent pas à la question. C'est juste la façon dont le site fonctionne.
  • Je n'ai pas connaître la réponse lors de la publication de cette question. Tu me dis de poster une NOUVELLE QUESTIOn à la "réponse" que "comme une réponse"?
  • Pas de. Car il existe déjà une réponse à votre solution, vous devriez tout simplement ne rien faire. Si il n'y avait pas une réponse a votre solution, alors vous devriez avoir posté une réponse à votre question avec la réponse.
  • Bon, j'ai vu beaucoup de questions avant l'OP mis à jour sa question avec la réponse, et aucun (après des années) n'a pas le supprimer. Je suppose que vous m'énervait à ce sujet, et j'en suis désolé, vous avez raison 🙂 je voulais juste le rendre plus facile pour les futurs "googlers" pour trouver une solution rapide.
  • pourquoi ne pas la accepté de répondre à contenir la question? je pense qu'il devrait ou comment savons-nous quelle est la réponse pour?
  • non, mais wth est en place avec toutes les + "" des trucs? Se débarrasser de l'inutile indésirable. Si tu veux le faire .ToString(), puis à .ToString(). Ou de l'utilisation de la chaîne d'interpolation.. que ce soit. + "" n'a tout simplement pas regarder à droite.
  • non, plus courte.