MAC OS X: Wie kann man feststellen, ob Dateisystem Groß- und Kleinschreibung unterscheidet?

7

Ich habe die statfs (2) Systemaufruf, um viele Eigenschaften eines Mac OS X-Dateisystems zu erhalten, aber es sagt mir nicht, ob das Dateisystem Groß- und Kleinschreibung unterscheidet oder nicht.

Ich brauche diese Informationen, da die Anwendung, die ich entwickle, viele Dateien umherschleppen wird und ich einen möglichen Datenverlust erkennen möchte, weil Dateien von einem case- sensitiven Dateisystem in einen Fall verschoben werden. unempfindliches Dateisystem.

Kann jemand vorschlagen, dies zu erkennen?

    
trojanfoe 16.01.2011, 15:35
quelle

4 Antworten

9

Wenn Sie stat(2) bereits verwenden, können Sie einfach pathconf(2) mit dem Selektor _PC_CASE_SENSITIVE (result 0 = case-insensitiv, 1 = Groß- und Kleinschreibung beachten. Beachten Sie, dass die man-Seite veraltet ist, aber die _PC_CASE_SENSITIVE und _PC_CASE_PRESERVING werden unterstützt. Wenn ein Dateisystem _PC_CASE_SENSITIVE selector nicht unterstützt, wird die Groß- / Kleinschreibung beachtet.

    
Don J Brady 05.03.2011, 07:18
quelle
9

Ich habe mich umgeschaut und keine API dafür gefunden. Es gibt zwei Möglichkeiten, die ich mir vorstellen kann:

  • Eine temporäre Datei erstellen und versuchen, sie mit einem anderen Fallmuster zu öffnen, z. Erstellen "A9999" und versuchen, "A9999" zu öffnen. Wenn man bedenkt, dass weder "a9999" noch "A9999" in diesem bestimmten Verzeichnis verfügbar waren, unterscheidet das Dateisystem genau dann, wenn das Öffnen von "A9999" fehlschlägt.
  • Ausführen von diskutil(8) gegen das Dateisystem. Es gibt Unterschiede zwischen Groß- und Kleinschreibung in Dateisystemen aus: Name: Mac OS Extended (Case-sensitive) vs. Name: Mac OS Extended (nicht journaled).

Da diskutil(8) das identifizieren kann, könnte es sein, dass diese Information über eine API oder einen Systemaufruf verfügbar ist.

Bearbeiten: Es stellt sich heraus, dass NSURL über eine Reihe von Methoden verfügt, die mit Dateisystemeigenschaften arbeiten. Insbesondere zeigt -getResourceValue:forKey:error mit dem Schlüssel NSURLVolumeSupportsCaseSensitiveNamesKey an, ob ein bestimmtes Dateisystem (dargestellt als NSURL instance) Groß- und Kleinschreibung unterstützt.

Siehe den folgenden Code für ein Anwendungsbeispiel.

%Vor%

Ausgabebeispiel:

%Vor%     
user557219 16.01.2011 16:00
quelle
6

Erstellen Sie eine temporäre Datei mit Großbuchstaben und prüfen Sie, ob die Datei in Kleinbuchstaben vorliegt. Wenn der Test fehlschlägt, wird unter unterschieden     

ismail 16.01.2011 15:57
quelle
1

Suchen Sie hier nach Code, um den HFS-Untertyp eines Geräts zu finden:

Ссылка

Die Routine is_hfs gibt den hfs-Subtyp zurück. Wenn der Subtyp kHFSXSubType oder kHFSXJSubType ist, handelt es sich um ein HFSX-Gerät (case sensitive).

    
Ken Aspeslagh 16.01.2011 16:02
quelle