我的程序在Windows 7/Vista和我測試過的大多數Windows XP上運行良好。我在程序本身下打開一個1目錄的文件。它是Administration \ adm.txt(這正是我使用的相對目錄)。我爲我的項目使用.NET 2.0。 我試圖在舊的Windows XP(已安裝.NET 2.0)上運行我的程序,並且遇到了我生命中曾經見過的最奇怪的錯誤。該程序運行良好,直到用戶打開一個打開的文件對話框。之後,程序開始認爲它位於最後打開的文件對話框所在的目錄中。因此,如果打開的文件對話框上次瀏覽了C:\ My Documents \,並且嘗試打開Administration \ adm.txt文件,則會出現「C:\ My Documents \ Administration \ adm.txt」不存在的異常。不幸的是,我不能再使用那臺電腦,但我真的很想知道這是怎麼發生的。有人有任何想法嗎?Windows XP下的程序路徑(C#程序)
0
A
回答
2
Windows中的標準行爲是用於文件對話框來更改應用程序的當前目錄。您可以使用OFN_NOCHANGEDIR標誌阻止該標誌用於配置open和save對話框的OPENFILENAME structure 。
對於這個故事,看到舊的新博客:
http://blogs.msdn.com/b/oldnewthing/archive/2010/11/12/10089878.aspx
0
除了鐵皮人的答覆,我會補充說,這不是一個好主意,使用目錄是相對於當前目錄,因爲其他進程(包括你自己所見過的)可以改變當前目錄。以下代碼是在程序目錄下的目錄中創建文件名的更可靠方法:
string exeDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string fileName = System.IO.Path.Combine(exeDirectory, System.IO.Path.Combine("Administration", "adm.txt"));
+0
謝謝你的回覆!這樣更安全,但這需要我瀏覽我所有的文件引用,並且它們非常多(除了我所述的內容之外)。而且我的項目變得非常龐大,我需要花很多時間來重寫所有使用任何IO的地方。 我只假設沒有其他外部進程會改變當前目錄。 – ThatGuy
相關問題
- 1. 程序打印Windows路徑?
- 2. 爲Windows XP編譯C#應用程序
- 3. 如何從C++程序修改鍵盤中斷(在Windows XP下)?
- 4. 列出Windows應用程序和路徑
- 5. 記錄C#程序的執行路徑?
- 6. Windows 8 Metro應用程序中的可下載文件路徑?
- 7. C:// Windows XP位置在XP/W7/W8上的JavaScript唯一路徑
- 8. Windows XP中的DPI Aware應用程序
- 9. 重寫應用程序路徑ASP.NET C#
- 10. C#裝飾應用程序路徑
- 11. .NET LDAP路徑實用程序(C#)
- 12. mono c#獲取應用程序路徑
- 13. C#拒絕訪問路徑在Windows應用程序
- 14. 應用程序根路徑
- 15. 在Windows XP上運行32位程序
- 16. 編寫iPhone應用程序在Windows XP
- 17. 應用程序無法在Windows XP上
- 18. 3D屏幕保護程序干擾WPF應用程序(Windows XP)
- 19. 查找C:\程序路徑(不是腳本路徑)
- 20. 最短路徑程序
- 21. 應用程序路徑
- 22. Django應用程序路徑
- 23. C#應用程序在XP上崩潰
- 24. 需要幫助編譯Windows XP上的目標c程序
- 25. C#應用程序的.Net 2.0無法在Windows XP
- 26. 在C#中爲Windows XP製作Vista風格的應用程序
- 27. 的Visual C++ 2012應用程序將無法在Windows XP下運行 - 更新
- 28. 是否可以在Windows XP下用普通的C++程序覆蓋代碼段?
- 29. Windows安裝程序中的常見應用程序數據路徑
- 30. 如何測量上傳和下載網絡利用程序在Windows XP上的過程在C#中的Windows 8?
非常感謝您的幫助!但是 - 爲什麼這隻發生在Windows XP版本下呢? – ThatGuy
@ThatGuy:OPENFILENAME鏈接的第一段給出了一個線索(我猜這裏有點IMO)。在Vista下,舊的對話功能被替換爲可能不會設置當前目錄的新功能。 .Net可能會檢查Vista或更高版本並使用新版本。我不能確認,因爲我只在XP上。 – tinman
謝謝。我使用的是C#,我一直只使用託管代碼。有沒有辦法讓我仍然可以更改OpenFileDialog的屬性,以便它在最後恢復正常? – ThatGuy