Ich habe eine * .exe-Datei in \ ProgramFiles (x86) \ MyAppFolder.Was ist der Unterschied zwischen File.Exists ("") und FileInfo existiert
In x86-Anwendung überprüfe ich, ob die Datei existiert (64-Bit-System). einfach:
bool fileExists = File.Exists(@"\ProgramFiles(x86)\MyAppFolder\Manager.exe");
Das Ergebnis ist: "fileExists == false" (die Datei wirklich da ist). Es ist Virtualisierung, wie ich verstehe. Dieses Problem beschrieben here Es ist in Ordnung. Aber nächste Code:
bool fileExists = new FileInfo("\\Path").Exists;
"fileExists == true"
Warum ist das Ergebnis anders in der 1. und 2. Fälle?
var controller = new ServiceController(Product.ServiceName);
_manager.Enabled = controller.Status == ServiceControllerStatus.Running;
var info = new DirectoryInfo(Assembly.GetExecutingAssembly().Location);
var s = File.Exists(@"D:\TFS\GL_SOURCES\Teklynx_LPM\Dev\Server\Debug\Manager.exe");
string pathToManager = string.Empty;
if (info.Parent != null)
{
var pathToModule = info.Parent.FullName;
pathToManager = Path.Combine(pathToModule,"Manager.exe").Replace(" ",string.Empty);
}
// funktioniert gut
var fileInfo = new FileInfo(pathToManager);
var managerSeparator = new ToolStripSeparator()
{
Visible = _manager.Visible = fileInfo.Exists // true
};
// nicht
var managerSeparator = new ToolStripSeparator()
{
Visible = _manager.Visible = File.Exists(pathToManager) // false
};
Dank Funktioniert!
Für Fenster, Dateisystempfade verwenden '\\ und nicht'/und .. Ihre Beispielanrufe verwenden unterschiedliche Pfade ...? – crashmstr
Ich kann mir vorstellen, dass der einzige Grund, FileInfo.Exist über File.Exists zu verwenden, ist, wenn Sie später das FileInfo-Objekt verwenden. –
Verwenden Sie "ProgramFiles (x86)" wie beschrieben? weil dieser Ordnername Leerzeichen enthält "Programme (x86)" – cichy