Witam wszystkich, niedawno padł mi dysk, a razem z nim moje funkcje itd. Miałem na nim swoją funkcje konwertującą rozmiar pliku na sting'a w postaci B, KB, MB, TB itd. Nie chce mi się pisać ponownie, pomoże ktoś?
- Rejestracja:ponad 3 lata
- Ostatnio:2 dni
- Lokalizacja:Warszawa
- Postów:88
function FormatFileSize(const SizeInBytes: Int64): string;
const
KiloByte = 1024;
MegaByte = KiloByte * 1024;
GigaByte = MegaByte * 1024;
TeraByte = GigaByte * 1024;
begin
if SizeInBytes < KiloByte then
Result := Format('%d B', [SizeInBytes])
else if SizeInBytes < MegaByte then
Result := Format('%.2f KB', [SizeInBytes / KiloByte])
else if SizeInBytes < GigaByte then
Result := Format('%.2f MB', [SizeInBytes / MegaByte])
else if SizeInBytes < TeraByte then
Result := Format('%.2f GB', [SizeInBytes / GigaByte])
else
Result := Format('%.2f TB', [SizeInBytes / TeraByte]);
end;
var
SizeInBytes: Int64;
FileSizeString: string;
begin
SizeInBytes := 1548496; // Replace this with the actual file size in bytes
FileSizeString := FormatFileSize(SizeInBytes);
Writeln(FileSizeString); // Output: "1.48 MB"
end;
- Rejestracja:prawie 5 lat
- Ostatnio:4 dni
- Postów:47
@darkonepl dzieki
- Rejestracja:ponad rok
- Ostatnio:3 miesiące
- Postów:34
uses
Winapi.Windows, System.Math;
function GetFileSize(const FileName: string): Int64;
var
AttributeData: TWin32FileAttributeData;
begin
if GetFileAttributesEx(PChar(FileName), GetFileExInfoStandard, @AttributeData) then
begin
Int64Rec(Result).Lo := AttributeData.nFileSizeLow;
Int64Rec(Result).Hi := AttributeData.nFileSizeHigh;
end
else
Result := -1;
end;
function ConvertBytes(Bytes: Int64): string;
const
Description: Array [0 .. 8] of string = ('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
var
i: Integer;
begin
i := 0;
while Bytes > Power(1024, i + 1) do
i := i + 1;
Result := FormatFloat('###0.##', Bytes / IntPower(1024, i)) + ' ' + Description[i];
end;
- Rejestracja:prawie 5 lat
- Ostatnio:4 dni
- Postów:47
@first_person
Dzięki.

- Rejestracja:ponad 13 lat
- Ostatnio:około 3 godziny
- Lokalizacja:Tuchów
- Postów:12167
Podane wyżej obliczenia są nieprawidłowe — albo liczby są złe, albo jednostki. :]
Tak tylko przypomnę, że kilobajt to 1000 bajtów, tak samo jak kilogram to 1000 gramów (i tak samo jak kilometr to 1000 metrów). Jeśli używacie typowych przedrostków, to dzielcie liczbę bajtów przez 1000
, a jeśli dzielicie przez 1024
to zmieńcie jenostki na kibibajty (skrót to KiB). Więcej na ten temat znajdziecie np. w wikipedii:
- screenshot-20230804231209.png (29 KB) - ściągnięć: 3

- Rejestracja:około 6 lat
- Ostatnio:około 4 godziny
furious programming napisał(a):
Tak tylko przypomnę, że kilobajt to 1000 bajtów, tak samo jak kilogram to 1000 gramów (i tak samo jak kilometr to 1000 metrów). Jeśli używacie typowych przedrostków, to dzielcie liczbę bajtów przez
1000
, a jeśli dzielicie przez1024
to zmieńcie jenostki na kibibajty (skrót to KiB). Więcej na ten temat znajdziecie np. w wikipedii:
Źródło: https://pl.wikipedia.org/wiki/Kilobajt
Tylko że nawet w tym cytowanym źródle piszą:
W przeciwieństwie do innych dziedzin nauki, w informatyce przedrostek kilo oznacza często nie krotność 10^3, lecz 2^10:
i dosłownie nikt nie używa słów "kibibajt", "mebibajt" chyba że chce wyjść na d.bila ;)
Aby uniknąć niejednoznaczności, w wielu krajach (w tym w Polsce) przyjęło się używanie wielkiej litery K dla oznaczania krotności 1024, zaś małej k – dla krotności 1000. Podobnie wielka litera B oznacza bajt, mała b – bit.
The binary meaning of the kilobyte for 1024 bytes typically uses the symbol KB, with an uppercase letter K. The B is often omitted in informal use. For example, a processor with 65,536 bytes of cache memory might be said to have "64 K" of cache. In this convention, one thousand and twenty-four kilobytes (1024 KB) is equal to one megabyte (1 MB), where 1 MB is 1024^2 bytes
czyli po prostu "KB" = 1024 B, "kB" = 1000 B, a jakieś "KiB" to tylko propozycja IEC która z moich obserwacji się nigdzie nie przyjęła.
Krótko mówiąc - jednostki w powyższych postach są jak najbardziej ok choć mylące - dla pewności warto pisać dokładną ilość bajtów w nawiasie, ale mało kogo w sumie obchodzi wielkość pliku z taką precyzją więc w sumie bez znaczenia.
- Rejestracja:prawie 5 lat
- Ostatnio:4 dni
- Postów:47
99xmarcin