2014-01-13 55 views
1

我最近從Visual Studio 2008到Visual Studio 2012System.IO.FileInfo工程確定在Visual Studio 2008而不是在Visual Studio 2012

我跟一個老(和複雜)的代碼和工作升級升級又出奇地好,除了這個非常功能:

FI = New System.IO.FileInfo("X:\MyFolder\MyFile.sim") 

(其中 「X:\」 是映射的外部驅動器)

  • 在Visual Studio 2008中:FI.Exists
  • 在Visual Studio 2012:FI.Exists

我很困惑有關。有沒有人知道我該如何解決這個問題?

+0

您的'TargetFramework'是否從VS2008更改爲VS2012?例如。您是否仍在VS2012中使用'NET20'或'NET30'? –

+4

您是以管理員身份運行VS2008還是VS2012,而不是其他人?當你以管理員身份運行時,你的會話中沒有相同的映射網絡驅動器... –

+0

@ThomasLevesque:我嘗試將VS2012作爲管理員運行,但並未改變行爲。 –

回答

1

根據MSDN,關於System.IO.FileInfo.Exists返回false的原因,NET20NET45之間沒有任何變化。這就是說,Exists可以在以下任何一種情況下返回false:

  • 該文件不存在。
  • 該路徑不存在。
  • 正在執行的程序集沒有權限訪問該文件。
    • 執行程序集的用戶沒有權限
    • 程序集在沒有權限的用戶範圍內執行。 (例如,以管理員身份運行)。
  • 該路徑包含無效字符。
  • 該路徑爲空。
  • 路徑無法到達(例如,網絡驅動器已斷開連接)。

掌握了這些信息之後,您應該嘗試在不同的環境中運行您的代碼。如:

  • 有或沒​​有運行VS作爲管理員
  • 運行可執行直接(外VS的)
  • 使用工具如LINQPad以運行該代碼的腳本形式:var FI = new System.IO.FileInfo("X:\MyFolder\MyFile.sim");

您可以採取的另一種途徑是調試,這是針對本地計算機上存在的已知文件運行它。例如,測試桌面上的文件是否存在於兩個運行時間中。儘管我強烈懷疑這與網絡驅動器在閒置時斷開連接有關。您也可以嘗試繞過映射的驅動器並直接轉到完整路徑(例如\ some-server \ MyFolder \ MyFile.sim)並查看是否引發異常或其他類型的結果。

+0

非常感謝您的詳細解答。今天,一天之後,無需重新啓動機器,它就可以工作。我無法弄清楚,我沒有做任何事情可以改變這種情況:目標框架仍然是NET40等。但在此之前,我測試了「Exists」返回false的所有條件(請參閱下一條評論)。 –

+0

1和2:文件或路徑確實存在。 3.1和3.2:我以用戶身份訪問該文件(因爲我可以使用該資源管理器訪問該文件),並以管理員身份運行VB2012或不更改結果(FileInfo.Exists仍然爲false)。 4:它不包含任何無效字符。 5:路徑不爲空。 6:驅動器已連接。我沒有做其他測試,現在它正在工作,我不能對他們(對不起,如果有其他人有同樣的問題,並找到這篇文章)。 –

+0

@Tremor網絡驅動器可能會遇到像這樣的間歇性問題。我無法告訴你爲什麼,但我看到過這樣不一致的結果。我懷疑這是與緩存連接有關的問題。很高興它爲你工作。 –