2012-06-05 28 views
2

我有從文本文件讀取加密憑據的代碼。我更新了該文本文件以包含連接字符串。其他的東西都可以很好地讀取和解密,但不是連接字符串(當然,我也相應地更新了我的代碼)。我的應用程序如何查找輔助文本文件的舊版本?

所以我想知道:它是否讀取正確的文件。答案:不!在\ BIN \調試文件的日期是2012/6/5上午9:41分,但是這個代碼:

using (StreamReader reader = File.OpenText("Credentials.txt")) { 
    string line = null; 
    MessageBox.Show(File.GetCreationTime("Credentials.txt").ToString()); 

...顯示2012年6月4日下午2時00分44秒

所以我在我的硬盤上搜索了「Credentials.txt」的所有實例,以查看它從哪裏讀取文件。它只能找到一個實例,即在\ bin \ debug中具有今天日期的實例。

???

注意:Credentials.txt不是我解決方案的一部分;它應該是什麼? (IOW,我只是將它複製到\ bin \ debug中,我沒有執行「Add | Existing Item」)

+0

您如何看待「今天的日期」? –

+0

你確定你沒有看最後修改日期嗎?這將顯示今天的日期,因爲你今天修改了它。 – Botonomous

+3

有三個日期:創建時間,上次修改時間,上次訪問時間。 Windows資源管理器中顯示的日期不會是創建時間,而是上次修改日期。 – mellamokb

回答

4

如果您不更改當前目錄,bin \ Debug中的文件將會是正在閱讀的人,因爲你沒有指定完整的路徑。

該問題可能是由於不同文件日期之間的差異。創建日期(這是您獲取並顯示爲6/4 @ 2:00:44 pm)可能與修改日期不同(這是Windows資源管理器中默認顯示的內容)。這個日期可以使用File.GetLastWriteTime而不是GetCreationTime來獲取。這就是說,我會建議使用文件的完整路徑,而不是假設當前目錄與可執行文件路徑相同。指定完整路徑(可以根據可執行路徑確定)將會更安全,並且稍後可能會導致問題。這可以通過以下方式完成:

var exePath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); 
var file = System.IO.Path.Combine(exePath, "Credentials.txt"); 
using (StreamReader reader = File.OpenText(file)) { // ... 
+0

我有一個相同的問題。我還沒有嘗試過你的解決方案,但你得到一個投票只是因爲它意味着我不會發瘋! –

相關問題