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?
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.
Ich habe mich umgeschaut und keine API dafür gefunden. Es gibt zwei Möglichkeiten, die ich mir vorstellen kann:
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%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).
Tags und Links api macos filesystems case-sensitive