C# 无法将 FileSize 从字节转换为 GB
C# Unable to convert FileSize from Bytes to GB
我正在使用 C# 计算文件大小:-
FileInfo info = new FileInfo(file);
uint dummy, sectorsPerCluster, bytesPerSector;
int result = GetDiskFreeSpaceW(info.Directory.Root.FullName,
out sectorsPerCluster, out bytesPerSector, out dummy, out dummy);
if (result == 0) throw new Win32Exception();
uint clusterSize = sectorsPerCluster * bytesPerSector;
uint hosize;
uint losize = GetCompressedFileSizeW(file, out hosize);
long size;
size = (long)hosize << 32 | losize;
var x = (((size + clusterSize - 1) / clusterSize) * clusterSize); // in bytes
然而,当我尝试将其转换为 GB 时:-
x/ (1024 * 1024 * 1024)
我总是得到 0 作为答案。我假设这与 x 的数据类型有关。有人可以帮助我理解这一点吗?
正在做整数除法。对于小于 1GB 的任何内容,您都会看到 0,即使超过 1GB,您仍然只会看到整数。试试这个:
x/ (1024.0 * 1024.0 * 1024.0)
或
x/ (1024D * 1024D * 1024D)
并确保将结果放入支持浮点值的对象中。也许你可以改变:
var x =
到
double x =
我正在使用 C# 计算文件大小:-
FileInfo info = new FileInfo(file);
uint dummy, sectorsPerCluster, bytesPerSector;
int result = GetDiskFreeSpaceW(info.Directory.Root.FullName,
out sectorsPerCluster, out bytesPerSector, out dummy, out dummy);
if (result == 0) throw new Win32Exception();
uint clusterSize = sectorsPerCluster * bytesPerSector;
uint hosize;
uint losize = GetCompressedFileSizeW(file, out hosize);
long size;
size = (long)hosize << 32 | losize;
var x = (((size + clusterSize - 1) / clusterSize) * clusterSize); // in bytes
然而,当我尝试将其转换为 GB 时:-
x/ (1024 * 1024 * 1024)
我总是得到 0 作为答案。我假设这与 x 的数据类型有关。有人可以帮助我理解这一点吗?
正在做整数除法。对于小于 1GB 的任何内容,您都会看到 0,即使超过 1GB,您仍然只会看到整数。试试这个:
x/ (1024.0 * 1024.0 * 1024.0)
或
x/ (1024D * 1024D * 1024D)
并确保将结果放入支持浮点值的对象中。也许你可以改变:
var x =
到
double x =