簡體   English   中英

C#File.Exists返回false,文件確實存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM