How do i get single file size?

c#, winforms

Solution

For some reason the static class `File` does not contain a `Size(String fileName)` method, instead you need to do it this way:

Int64 fileSizeInBytes = new FileInfo(fileName).Length;

Regarding performance:

Don't worry about the `new FileInfo` allocation:

- `FileInfo` does not own any unmanaged resources (i.e. it's not `IDisposable`)

- `FileInfo`'s constructor is cheap: The constructor simply gets the normalized path via `Path.GetFullPath` and performs a `FileIOPermission` - it stores the normalized path as a .NET `String` in an instance field.

Most of the work is inside the `Length` property getter: itself is a wrapper around Win32's `GetFileAttributesEx` - so the operations performed are almost identical to what it would be if it were a `static` utility method.

As the new `FileInfo` object is short-lived it means the GC will collect it quickly as a Generation 0 object. The overhead of a couple of strings (`FileInfo`'s fields) on the heap really is negligible.

Problem

This is the method: ``` 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()); } } ``` In the bottom the variable t contain the directory and file name. for example: "c:\temp\test.txt" I want to get this file name size. How can i do it ?

Original source