[英]Pattern Matching with 8 conditions in C#: File.Exists returns false, but the file does exist
[英]C# File.Exists returns false, file does exist
使用VS 15,C#和.Net 4.5.2
計算機位於AD網絡上,廣告名稱為“AD”。
AD正常用戶權限,AD管理員權限和本地管理員權限會發生此問題。 無論程序獲得什么權利,都會出現同樣的問題。
我們的測試文件是“ C:/windows/system32/conhost.exe ”。
上面的文件存在,它是非常存在的。 我可以用資源管理器看到它。
你可以看到它在那里,對嗎?
以下cmd命令檢查文件是否存在:
IF EXIST "C:\windows\system32\conhost.exe" (echo does exist) ELSE (echo doesnt exist)
它按照承諾返回“ 確實存在 ”。
以下C#代碼檢查文件是否存在:
FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");
返回“ False ”。
此代碼也返回“ False ”:
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
此代碼也找不到它:
foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn't exist
}
此代碼也找不到它:
foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn't exist
}
假,假,假:
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") + "");
我究竟做錯了什么?
額外注意:我將conhost復制到C:\\ conhost.exe,我的程序可以毫無問題地找到它。 我的程序還在system32中找到其他文件,只是沒有conhost和其他一些文件。 例如,它找到system32中的“connect.dll”,因此它不是目錄的讀取權限。
更多額外說明:conhost.exe和connect.dll具有相同的安全屬性(文件屬性中的“安全”選項卡)。
如果您使用的是x64系統,則x86和x64應用程序的c:\\Windows\\System32
目錄將具有不同的內容。 請確保您使用的是運行批處理文件和C#應用程序的相同架構。
在System.IO.File.Exists(path)的MSDN文檔中,它指出:
如果調用者沒有足夠的權限來讀取指定的文件,則不會拋出任何異常,並且無論路徑是否存在,該方法都返回false。
因此,我們可以安全地假設您的應用程序沒有對該特定文件的讀取權限。 如果尚未執行此操作,請檢查安全設置並授予讀取權限。
構建應用程序(在發布模式下)並以管理員身份運行。
這是來自64位操作系統的問題......這是一個解決方法,
轉到項目的屬性>單擊構建選項卡>取消選擇首選32位
之后,它應該在64位操作系統上正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.