Ruby: Wie ermittelt man, ob es sich bei der gelesenen Datei um eine Binärdatei oder einen Text handelt?

8

Ich schreibe ein Programm in Ruby, das nach Strings in Textdateien innerhalb eines Verzeichnisses sucht - ähnlich wie Grep.

Ich möchte nicht, dass es versucht, in Binärdateien zu suchen, aber ich kann keinen Weg in Ruby finden, um zu bestimmen, ob eine Datei binär oder Text ist.

Das Programm muss sowohl unter Windows als auch unter Linux funktionieren.

Wenn mir jemand in die richtige Richtung zeigen könnte, wäre das großartig.

Danke,

Xanthalas

    
Xanthalas 01.03.2010, 12:53
quelle

3 Antworten

5
%Vor%     
quadruplebucky 01.03.2010, 13:18
quelle
13

libmagic ist eine Bibliothek, die Dateitypen erkennt. Für diese Lösung gehe ich davon aus, dass alle MIME-Typen, die mit text/ beginnen, Textdateien darstellen. Alles andere ist eine Binärdatei. Diese Annahme ist nicht für alle MIME-Typen korrekt (zB application / x-latex, application / json), aber libmagic erkennt diese als text / plain.

%Vor%     
johannes 01.03.2010 13:47
quelle
2

Eine Alternative zur Verwendung des Gems ruby-filemagic ist die Verwendung des Befehls file , der mit den meisten Unix-ähnlichen Betriebssystemen ausgeliefert wird. Ich glaube, es verwendet die gleiche libmagic Bibliothek unter der Haube, aber Sie benötigen nicht die Entwicklungsdateien, die benötigt werden, um den ruby-filemagic Edelstein zu kompilieren. Dies ist hilfreich, wenn Sie sich in einer Umgebung befinden, in der zusätzliche Bibliotheken (z. B. Heroku) installiert werden müssen.

Laut man file enthalten Textdateien normalerweise das Wort text in ihrer Beschreibung:

%Vor%

Sie können den Dateibefehl ausführen, indem Ruby die Ausgabe erfassen kann:

%Vor%     
Adam Sheehan 01.01.2015 19:15
quelle

Tags und Links