Ceci est un port de bytetesize à Delphi / Freepascal.
TByteSize est un "enregistrement" de l'utilitaire qui facilite la représentation de la taille des octets dans le code en supprimant l'ambiguïté de la valeur représentée.
TByteSize est aux octets quel System.TimeSpan.TTimeSpan est à temps.
Ce projet a été créé à l'aide de Delphi 10 Seattle Update 1, mais devrait compiler dans n'importe quelle version de Delphi à partir de 2009 et Freepascal 3.0.0 vers le haut.
Sans TByteSize :
const
MaxFileSizeMBs = 1.5 ;
// I need it in KBs!
var
kilobytes: Double;
begin
kilobytes := MaxFileSizeMBs * 1024 ;
end ; Avec ByteSize :
var
MaxFileSize: TByteSize;
begin
MaxFileSize := TByteSize.FromMegaBytes( 1.5 );
end ;
// I have it in KBs!
MaxFileSize.KiloBytes; TByteSize se comporte comme tout autre record soutenu par une valeur numérique.
// Add
var
monthlyUsage, currentUsage, total, delta, : TByteSize;
begin
monthlyUsage := TByteSize.FromGigaBytes( 10 );
currentUsage := TByteSize.FromMegaBytes( 512 );
total := monthlyUsage + currentUsage;
total.Add(ByteSize.FromKiloBytes( 10 ));
total.AddGigaBytes( 10 );
// Subtract
delta := total.Subtract(TByteSize.FromKiloBytes( 10 ));
delta := delta - TByteSize.FromGigaBytes( 100 );
delta := delta.AddMegaBytes(- 100 );
end ; Vous pouvez créer un "objet" ByteSize à partir de bits , bytes , kilobytes gibiers, megabytes , gigabytes et terabytes .
TByteSize.Create( 1.5 ); // Constructor takes in bytes
// Static Constructors
TByteSize.FromBits( 10 ); // Bits are whole numbers only
TByteSize.FromBytes( 1.5 ); // Same as constructor
TByteSize.FromKiloBytes( 1.5 );
TByteSize.FromMegaBytes( 1.5 );
TByteSize.FromGigaBytes( 1.5 );
TByteSize.FromTeraBytes( 1.5 );
TByteSize.FromPetaBytes( 1.5 );
Un "objet" TByteSize contient des représentations en bits , bytes , kilobytes giétistes, megabytes , gigabytes , terabytes et petabytes .
var
maxFileSize: TByteSize;
begin
maxFileSize := TByteSize.FromKiloBytes( 10 );
maxFileSize.Bits; // 81920
maxFileSize.Bytes; // 10240
maxFileSize.KiloBytes; // 10
maxFileSize.MegaBytes; // 0.009765625
maxFileSize.GigaBytes; // 9.53674316e-6
maxFileSize.TeraBytes; // 9.31322575e-9
end ; Un "objet" TByteSize contient également deux propriétés qui représentent le plus grand symbole et la valeur du préfixe métrique.
var
maxFileSize: TByteSize;
begin
maxFileSize := TByteSize.FromKiloBytes( 10 );
maxFileSize.LargestWholeNumberSymbol; // "KB"
maxFileSize.LargestWholeNumberValue; // 10
end ; Toutes les opérations d'analyse de chaîne ( String to TByteSize ) sont localisées pour utiliser le séparateur décimal numéro des paramètres régionaux actuellement définis.
TByteSize est livré avec une méthode ToString pratique qui utilise le plus grand préfixe métrique dont la valeur est supérieure ou égale à 1.
TByteSize.FromBits( 7 ).ToString; // 7 b
TByteSize.FromBits( 8 ).ToString; // 1 B
TByteSize.FromKiloBytes(. 5 ).ToString; // 512 B
TByteSize.FromKiloBytes( 1000 ).ToString; // 1000 KB
TByteSize.FromKiloBytes( 1024 ).ToString; // 1 MB
TByteSize.FromGigabytes(. 5 ).ToString; // 512 MB
TByteSize.FromGigabytes( 1024 ).ToString; // 1 TB La méthode ToString accepte un paramètre string unique pour formater la sortie. Le formateur peut contenir le symbole de la valeur à afficher: b , B , KB , MB , GB , TB , PB . Le formateur utilise la méthode FormatFloat intégrée. Le format de numéro par défaut est #.## qui arrête le nombre à deux décimales.
Vous pouvez inclure des formats de symboles et de nombres.
var
b: TByteSize;
begin
b := TByteSize.FromKiloBytes( 10.505 );
// Default number format is #.##
b.ToString( ' KB ' ); // 10.52 KB
b.ToString( ' MB ' ); // .01 MB
b.ToString( ' b ' ); // 86057 b
// Default symbol is the largest metric prefix value >= 1
b.ToString( ' #.# ' ); // 10.5 KB
// All valid values of double.ToString(string format) are acceptable
b.ToString( ' 0.0000 ' ); // 10.5050 KB
b.ToString( ' 000.00 ' ); // 010.51 KB
// You can include number format and symbols
b.ToString( ' #.#### MB ' ); // .0103 MB
b.ToString( ' 0.00 GB ' ); // 0 GB
b.ToString( ' #.## B ' ); // 10757.12 B
end ; ByteSize a une méthode Parse et TryParse .
Comme les autres méthodes TryParse , ByteSize.TryParse renvoie la valeur boolean indiquant si l'analyse a réussi ou non. Si la valeur est analysée, elle est sortie au paramètre out fourni.
var
output: TByteSize;
begin
TByteSize.TryParse( ' 1.5mb ' , output);
// Invalid
TByteSize.Parse( ' 1.5 b ' ); // Can't have partial bits
// Valid
TByteSize.Parse( ' 5b ' );
TByteSize.Parse( ' 1.55B ' );
TByteSize.Parse( ' 1.55KB ' );
TByteSize.Parse( ' 1.55 kB ' ); // Spaces are trimmed
TByteSize.Parse( ' 1.55 kb ' );
TByteSize.Parse( ' 1.55 MB ' );
TByteSize.Parse( ' 1.55 mB ' );
TByteSize.Parse( ' 1.55 mb ' );
TByteSize.Parse( ' 1.55 GB ' );
TByteSize.Parse( ' 1.55 gB ' );
TByteSize.Parse( ' 1.55 gb ' );
TByteSize.Parse( ' 1.55 TB ' );
TByteSize.Parse( ' 1.55 tB ' );
TByteSize.Parse( ' 1.55 tb ' );
TByteSize.Parse( ' 1,55 kb ' ); // de-DE culture
end ;### Tests unitaires
Unit Tests can be found in ByteSizeLib.Tests Folder.
The unit tests makes use of DUnitX and TestInsight.
###Licence
Ce "logiciel" est sous MIT License (MIT) .
1MhFfW7tDuEHQSgie65uJcAfJgCNchGeKf0x6c1DC21aeC49A822A4f1E3bf07c623C2C1978a98345367-40###Conclusion
Un merci spécial à Omar Khudeira pour cette superbe bibliothèque. (Grâce aux développeurs de Dunitx Testing Framework et TeshiNsight pour la fabrication d'outils qui simplifient les tests unitaires.