GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistím, zda souborový systém v .net rozlišuje malá a velká písmena?

Mějte na paměti, že můžete mít více systémů souborů s různými pravidly pro malá a velká písmena. Například kořenový souborový systém může rozlišovat malá a velká písmena, ale můžete mít někde připojený souborový systém nerozlišující malá a velká písmena (např. USB klíčenka se souborovým systémem FAT). Pokud tedy takové kontroly provádíte, ujistěte se, že je provádíte v adresáři, ke kterému budete přistupovat.

Co když uživatel zkopíruje data ze systému souborů, řekněme s rozlišením malých a velkých písmen, do souborového systému bez rozlišení velkých a malých písmen? Pokud máte soubory, které se liší pouze velikostí písmen, jeden z nich přepíše druhý, což způsobí ztrátu dat. Při kopírování opačným směrem můžete také narazit na problémy, například pokud soubor A obsahuje odkaz na soubor "b", ale soubor se ve skutečnosti jmenuje "B". Toto funguje na původním systému souborů bez rozlišení malých a velkých písmen, ale ne na systému rozlišujícím malá a velká písmena.

Proto bych navrhoval, abyste se vyhnuli v závislosti na tom, zda systém souborů rozlišuje velká a malá písmena, pokud můžete. Negenerujte názvy souborů, které se liší pouze velikostí písmen, používejte standardní dialogová okna pro výběr souborů, buďte připraveni, že se velikost písmen může změnit atd.


Není to funkce .NET, ale funkce GetVolumeInformation a GetVolumeInformationByHandleW z rozhraní Windows API udělají to, co chcete (viz parametr yje lpFileSystemFlags.


V knihovně tříd .NET žádná taková funkce není.

Můžete však zavést své vlastní:Zkuste vytvořit soubor s názvem malými písmeny a poté jej zkuste otevřít s verzí názvu s velkými písmeny. Pravděpodobně je možné tuto metodu vylepšit, ale máte nápad.

UPRAVIT :Ve skutečnosti můžete vzít první soubor v kořenovém adresáři a pak zkontrolovat, zda existují oba filename.ToLower() a filename.ToUpper(). Bohužel je docela možné, že existují varianty s velkými i malými písmeny stejného souboru, takže byste měli porovnat vlastnosti FileInfo.Name malých i velkých variant, abyste zjistili, zda jsou skutečně stejné nebo ne. To nebude vyžadovat zápis na disk.

To samozřejmě selže, pokud na svazku nejsou vůbec žádné soubory. V tomto případě se vraťte k první možnosti (viz Martinova odpověď na implementaci).


Můžete vytvořit soubor ve složce temp (pomocí malých písmen názvu souboru) a poté zkontrolovat, zda soubor existuje (pomocí velkých písmen názvu souboru), např.:

string file = Path.GetTempPath() + Guid.NewGuid().ToString().ToLower();
File.CreateText(file).Close();
bool isCaseInsensitive = File.Exists(file.ToUpper());
File.Delete(file);

Linux
  1. Jak používat příkaz Tar v Linuxu

  2. Jak najít souborový systém CD/DVD, aby se automaticky připojilo:[Linux]

  3. Jak přesměrovat výstup system() do souboru?

  1. Jak zjistit, který proces vytváří soubor?

  2. Jak zvýšit počet inodů v souborovém systému Ext4?

  3. Jak přidat nový řádek na konec souboru?

  1. Linux – Jak zobrazit typ souborového systému přes terminál?

  2. Vlastnosti souborového systému „Btrfs“.

  3. Jak připojit výstup do souboru?