.net是否有辦法確定本地文件系統是否區分大小寫?如何確定文件系統是否在.net中區分大小寫?
回答
您可以創建在臨時文件夾中的文件(使用小寫文件名),然後檢查文件是否存在(使用大寫的文件名),例如:
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);
嘗試創建一個全部爲小寫的臨時文件,然後使用大寫字母檢查它是否存在。
.NET類庫中沒有這樣的函數。
但是,您可以推出自己的產品:嘗試使用小寫名稱創建文件,然後嘗試使用其名稱的upparcase版本打開它。可能有可能改進這種方法,但你明白了。
編輯:你實際上可能只是把第一個文件放在根目錄下,然後檢查filename.ToLower()和filename.ToUpper()是否都存在。不幸的是,很可能同一個文件的大寫和小寫變體都存在,因此您應該比較小寫和大寫變體的FileInfo.Name屬性,以確定它們是否確實相同。這不需要寫入磁盤。
顯然,如果捲上完全沒有文件,這將會失敗。在這種情況下,只需回到第一個選項(參見Martin的實現答案)。
請記住,你可能有多個文件系統採用不同的套管規則。例如,根文件系統可能區分大小寫,但您可以在某處安裝不區分大小寫的文件系統(例如,帶有FAT文件系統的USB存儲器)。因此,如果您進行此類檢查,請確保您將它們放入要訪問的目錄中。
另外,如果用戶將大小寫敏感的數據複製到不區分大小寫的文件系統,該怎麼辦?如果你的文件只是大小寫不同,其中一個會覆蓋另一個,導致數據丟失。在向另一個方向複製時,也可能遇到問題,例如,如果文件A包含對文件「b」的引用,但該文件實際上被命名爲「B」。這適用於原始不區分大小寫的文件系統,但不適用於區分大小寫的系統。
因此,我建議您避免取決於文件系統是否區分大小寫或者如果可以的話。不要生成只是大小寫不同的文件名,使用標準文件選擇器對話框,準備好情況可能會發生變化等。
它不是.NET函數,但Windows API中的GetVolumeInformation和GetVolumeInformationByHandleW函數將你想要什麼(基於M4N的回答看YJE lpFileSystemFlags參數
/// <summary>
/// Check whether the operating system is case-sensitive.
/// For instance on Linux you can have two files/folders called
//// "test" and "TEST", but on Windows the two can not coexist.
/// This method does not extend to mounted filesystems, which might have different properties.
/// </summary>
/// <returns>true if the operating system is case-sensitive</returns>
public static bool IsFileSystemCaseSensitive()
{
// Actually try.
string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower() + "test";
File.CreateText(file).Close();
bool result = File.Exists(file.ToUpper());
File.Delete(file);
return result;
}
,有以下變化:
- 靜態名,使我們確信它包含了一封信,不僅數字 。
- 也許更具可讀性?
- 用方法包裝。
- 文檔。
一個更好的策略是將路徑作爲參數,並在相同的文件系統上創建文件,但是寫入文件可能會產生意想不到的後果。
我調用的作弊:
Path.DirectorySeparatorChar == '\\' ? "I'm insensitive" : "I'm probably sensitive"
- 1. 區分大小寫File.equals區分大小寫的文件系統
- 2. 我可以在不區分大小寫的文件系統上強制使用MySql表名區分大小寫
- 3. 區分大小寫區分大小寫還是全大寫?
- 4. 如何檢出區分大小寫的SVN源代碼分支到不區分大小寫的系統?
- 5. 表是否大於文件系統的最大文件大小?
- 6. android檢查文件是否存在區分大小寫?
- 7. Symfony中的XLIFF翻譯文件(I18n)是否區分大小寫?
- 8. Ubuntu中的文件名是否區分大小寫?
- 9. 在C++中宏/定義是否區分大小寫?
- 10. 如何確定SharePoint網站的正確(區分大小寫)URL
- 11. HTML.Partial是否區分大小寫?
- 12. git是否不區分大小寫?
- 13. MySQL表名是否區分大小寫?
- 14. $ scope變量是否區分大小寫?
- 15. PyPI是否區分大小寫?
- 16. Java是否區分大小寫?
- 17. IDN域名是否區分大小寫?
- 18. Bundle - 是否區分大小寫?
- 19. actionscript是否區分大小寫?
- 20. SQL語法是否區分大小寫?
- 21. QHash :: contains方法是否區分大小寫或不區分大小寫?
- 22. 如何區分大小寫?
- 23. 確定分區是什麼文件系統
- 24. 包含頭文件時,路徑是否區分大小寫?
- 25. NAnt .build文件是否區分大小寫?
- 26. Log4J - 確定記錄器是否無法寫入文件系統
- 27. PyDev預定義的定義是否區分大小寫?
- 28. URL中的UTF8組件,是否應區分大小寫?
- 29. .NET HttpSessionState不區分大小寫
- 30. 開發使用區分大小寫的文件系統有利嗎?
約abc.xyz和aBc.xyz – masfenix 2009-01-10 00:47:30