我有一个字节数组,如果我将这些字节写入文件,我想计算文件大小。是否可以不将文件写入光盘?
问问题
82098 次
4 回答
104
怎么样array.Length
?看起来像字节大小。
于 2012-12-02T12:59:25.287 回答
57
嗯,是的:
int length = byteArray.Length;
内存中的一个字节将是磁盘上的一个字节......至少在更高级别的文件系统术语中。您还需要潜在地考虑将使用多少个单独的块/集群(以及目录条目的开销),以及操作系统可能提供的任何压缩,但从问题中不清楚这是否是您所追求的。
如果您真的想知道“磁盘大小”而不是文件大小(就像 Windows 可以显示这两个数字一样),我怀疑您真的必须将其写入磁盘 - 然后使用 Win32 API 找出磁盘上的实际大小。
于 2012-12-02T12:59:56.397 回答
7
Array.Length
将给出以字节表示的总大小。
考虑到集群大小,磁盘上的物理尺寸可能会稍微多一点。
于 2012-12-02T13:00:04.037 回答
2
前段时间我发现这个被剪断了,从那以后我喜欢这样做
public static string GetSizeInMemory(this long bytesize)
{
string[] sizes = { "B", "KB", "MB", "GB", "TB" };
double len = Convert.ToDouble(bytesize);
int order = 0;
while(len >= 1024D && order < sizes.Length - 1)
{
order++;
len /= 1024;
}
return string.Format(CultureInfo.CurrentCulture,"{0:0.##} {1}", len, sizes[order]);
}
您可以在访问任何提供文件或内存大小的东西(如 FileInfo 或 Process)时使用此扩展方法,以下是 2 个示例
private void ValidateResources(object _)
{
Process p = Process.GetCurrentProcess();
double now = p.TotalProcessorTime.TotalMilliseconds;
double cpuUsage = (now - processorTime) / MONITOR_INTERVAL;
processorTime = now;
ThreadPool.GetMaxThreads(out int maxThreads, out int _);
ThreadPool.GetAvailableThreads(out int availThreads, out int _);
int cpuQueue = maxThreads - availThreads;
var displayString= string.Concat(
p.WorkingSet64.GetSizeInMemory() + "/"
, p.PeakWorkingSet64.GetSizeInMemory(), " RAM, "
, p.Threads.Count, " threads, ", p.HandleCount.ToString("N0", CultureInfo.CurrentCulture)
, " handles, ", Math.Min(cpuUsage, 1).ToString("P2", CultureInfo.CurrentCulture)
, " CPU usage, ", cpuQueue, " CPU queue depth"
));
}
或带文件
FileInfo file = new FileInfo(pathtoFile);
string displaySize= file.Length.GetSizeInMemory();
于 2019-12-21T09:42:42.130 回答