Wie bekomme ich die Größe einer Datei in MB mit Perl?
Möchte ich, um die Größe einer Datei auf der Festplatte in Megabyte. Mit der -s
Betreiber gibt mir die Größe in bytes, aber ich gehe davon aus, dass dann teilt man diese durch eine Magische Zahl ist eine schlechte Idee:
my $size_in_mb = (-s $fh) / (1024 * 1024);
Sollte ich einfach ein nur-lese-variable zu definieren, 1024 oder gibt es eine programmatische Möglichkeit zum abrufen der Anzahl von bytes in einem Kb?
EDIT: Aktualisiert die falsche Berechnung.
InformationsquelleAutor cowgod | 2009-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, um zu vermeiden, Magische zahlen, versuchen Sie die CPAN-Modul Anzahl::Bytes::Mensch.
gerade entdeckt, es kann auch analysieren, lesbare Zeichenfolgen wieder in bytes!
InformationsquelleAutor jrockway
Natürlich könnten Sie eine Funktion erstellen, die für die Berechnung dieser. Das ist eine bessere Lösung als die Schaffung von Konstanten, die in dieser Instanz.
Keine Notwendigkeit für Konstanten. Ändern der
1024
zu irgendeiner Art von variable/Konstante nicht machen, dieser code ist besser lesbar.InformationsquelleAutor Peter Stuifzand
Gut, es ist nicht 1024 bytes in einem meg, es ist 1024 bytes in ein K und 1024 K in einer meg...
Sagte, 1024 ist eine sichere "Magische" Zahl, die sich nie ändern wird in jedem system können Sie erwarten, Ihr Programm zu arbeiten.
sprechen Sie mit marketing .. Sie haben eine andere Meinung (falsch IMHO, aber hey, Sie haben mehr Geld)
Aktualisiert die Frage. Es ist früh, so verzeihen Sie meine Zweifel in Kilobyte Megabyte für. 🙂
Verwenden Sie einfach die Nummer: Bytes::SIM-Modul. Viel einfacher, als es selbst tun, und viel besser lesbar.
An diesem Punkt, ich denke, es sollte entscheidend sein, um die ordnungsgemäße Verwendung der Definitionen von gigabyte und Gigabyte große (en.wikipedia.org/wiki/GiB). Als zwei separate Entitäten, sollten wir nicht befürchten, dass. Sie können immer leicht umwandeln von giga zu gibi, wenn es sein muss.
InformationsquelleAutor user54650
Las ich dies in einer variable, anstatt eine Magische Zahl. Auch wenn die magischen zahlen sind nicht zu ändern, wie die Anzahl der bytes in megabyte, mit einem gut benannte Konstante ist eine gute Praxis, weil es macht den code lesbarer zu gestalten. Es macht es sofort erkennbar für alle anderen, was Ihre Absicht ist.
InformationsquelleAutor Doug R
Dies ist eine alte Frage und die wurde schon richtig beantwortet, aber nur, wenn Ihr Programm beschränkt sich auf die core-Module und Sie können nicht Anzahl::Bytes::Mensch hier haben Sie verschiedene Optionen, ich habe im Laufe der Zeit gesammelt. Ich habe Sie auch, weil jeder über eine andere Perl-Ansatz und ist ein schönes Beispiel für TIMTOWTDI:
http://kba49.wordpress.com/2013/02/17/format-file-sizes-human-readable-in-perl/
.
.
++$n and ... until ..
, um einen index für das array.
Selbst wenn Sie nicht verwenden können, Nummer: Bytes::Mensch, werfen Sie einen Blick auf den Quellcode, um zu sehen, all die Dinge, die Sie brauchen, um sich bewusst sein.
InformationsquelleAutor Pablo Marin-Garcia
1) Sie wollen nicht 1024. Das gibt Ihnen Kilobyte. Sie möchten 1024*1024, oder 1048576.
2) Warum würde die Division durch eine Magische Zahl sein, eine schlechte Idee? Es ist nicht, wie die Anzahl der bytes in einem MB jemals ändern wird. Don ' T overthink Dinge zu viel.
InformationsquelleAutor Chris Lutz
Versteh mich nicht falsch, aber: ich denke, dass die Deklaration 1024 als eine Magische Variable geht ein bisschen zu weit, das ist ein bisschen wie "$EINS = 1; $ZWEI = 2;" etc.
Kilobyte wurde fälschlich erklärt als 1024 Bytes ist seit mehr als 20 Jahren, und ich bezweifle ernsthaft, dass der Betriebssystem-Hersteller wird jemals richtig, dass bug und ändern Sie es zu 1000.
Was könnte Sinn machen, ist aber zu erklären, nicht offensichtliche Dinge, wie "$megabyte = 1024 * 1024" da, die ist besser lesbar als 1048576.
InformationsquelleAutor Michael Stum
Da die -s-operator gibt die Größe der Datei in bytes, sollten Sie wahrscheinlich etwas wie
und mit int() wenn Sie eine Runde Figur. Es ist nicht, wie die Abmessungen von KB oder MB ist zu ändern in Naher Zukunft 🙂
InformationsquelleAutor aks