从bytes数组中获取文件大小(不保存到光盘)

nKo*_*ito 44 .net c# arrays

我有一个字节的数组,如果我将这些字节写入文件,我想计算文件大小.没有将文件写入光盘是否可能?

Ser*_*kiy 76

怎么样array.Length?看起来像一个字节大小.

  • 它不会返回数组中元素的总数吗? (2认同)

Jon*_*eet 46

嗯,是的:

int length = byteArray.Length;
Run Code Online (Sandbox Code Playgroud)

内存中的一个字节将是磁盘上的一个字节...至少在更高级别的文件系统术语中.您还需要考虑将使用多少单独的块/集群(以及目录条目的开销),以及操作系统可能提供的任何压缩,但是问题是否是您所追求的并不清楚.

如果你真的想要知道,而不是文件大小(以同样的方式,Windows可以显示两个数字)的"磁盘上的大小"我怀疑你真的必须把它写入到磁盘-然后用一个Win32用于查找磁盘上实际大小的API.


PPa*_*ann 7

前段时间我发现这个被剪掉了,从那以后我喜欢这样做

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]);
}
Run Code Online (Sandbox Code Playgroud)

当访问任何提供文件或内存大小(如 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"

            ));

}
Run Code Online (Sandbox Code Playgroud)

或使用文件

    FileInfo file = new FileInfo(pathtoFile);
    string displaySize= file.Length.GetSizeInMemory();
Run Code Online (Sandbox Code Playgroud)


Lit*_*eas 6

Array.Length会给你的总大小以字节表示。
考虑到集群大小,磁盘上的物理维度可能会更多一点。