如何获取单个文件大小?

10
这是方法:

private void Compressions(string zipFile,string sources)
        {
            try
            {
                string zipFileName = zipFile;
                string source = sources;
                string output = @"c:\temp";
                string programFilesX86 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) + "\\Diagnostic Tool\\7z.dll";
                if (File.Exists(programFilesX86))
                {
                    SevenZipExtractor.SetLibraryPath(programFilesX86);
                }
                else
                {
                    string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\7z.dll";
                    SevenZipExtractor.SetLibraryPath(path);
                }
                string programFiles = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\Diagnostic Tool\\7z.dll";
                if (File.Exists(programFiles))
                {
                    SevenZipExtractor.SetLibraryPath(programFiles);
                }
                else
                {
                    if (File.Exists(programFilesX86))
                    {
                        SevenZipExtractor.SetLibraryPath(programFilesX86);
                    }
                    else
                    {
                        string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\7z.dll";
                        SevenZipExtractor.SetLibraryPath(path);
                    }
                }
                SevenZipCompressor compressor = new SevenZipCompressor();
                compressor.ArchiveFormat = OutArchiveFormat.Zip;
                compressor.CompressionMode = CompressionMode.Create;
                compressor.TempFolderPath = System.IO.Path.GetTempPath();
                string t = Path.Combine(output, zipFileName);
                compressor.CompressDirectory(source, t);

                this.explorerWindow = Process.Start("explorer", String.Format("/select,{0}", t));
                this.TopMost = true;
            }
            catch (Exception err)
            {
                Logger.Write("Zip file error: " + err.ToString());
            }
        }

变量t中包含目录和文件名,例如:"c:\temp\test.txt"。我想获取此文件名的大小。

我该怎么做?


1
文件名大小还是文件大小? - zey
2个回答

22

由于某些原因,静态类File中没有包含Size(String fileName)方法,相反你需要按照以下方式进行:

Int64 fileSizeInBytes = new FileInfo(fileName).Length;

关于性能:

不要担心new FileInfo的分配:

  • FileInfo没有拥有非托管资源(即它不是IDisposable
  • FileInfo的构造函数很便宜:构造函数只需通过Path.GetFullPath获取标准化路径并执行FileIOPermission - 它将标准化路径作为 .NET String 存储在实例字段中。

大部分工作都在Length属性的getter方法中:它本身是对Win32的GetFileAttributesEx的包装器 - 因此所执行的操作几乎与如果它是一个static实用程序方法完全相同。

由于新创建的FileInfo对象的生命周期很短,这意味着GC将快速将其收集为第0代对象。堆上的一些字符串(FileInfo的字段)的开销确实可以忽略不计。


3

试试这样做

FileInfo fi = new FileInfo(fileName);
var size = fi.Length;
Console.WriteLine("File Size in Bytes: {0}", size);

例如。
FileInfo fileInfo = new FileInfo(@"c:\temp\test.txt");
var size = fi.Length;
Console.WriteLine("File Size in Bytes: {0}", size);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接