Overview of Types for Files/Directories
See here.
File & Directory IO
All methods return void unless otherwise specified.
files
| Goal | Use | 
|---|---|
| Check for a file | File.Exists(returnsbool) | 
| Copy a file | File.CopyFileInfo.CopyTo(returnsFileInfo) | 
| Delete a file | File.Delete,FileInfo.Delete | 
| Move/rename a file | File.Move,FileInfo.MoveTo | 
| Retrieve a full path | Path.GetFullPath | 
| Retrieve file name and extension | Path.GetFileName | 
| Retrieve a file extension | Path.GetExtension | 
| Change a file extension | Path.ChangeExtension | 
text files
| Goal | Use | 
|---|---|
| Create a text file | File.CreateText(returnsStreamWriter)File.Create(returnsFileStream)FileInfo.CreateText(returnsStreamWriter)FileInfo.Create(returnsFileStream) | 
| Write to a text file | StreamWriter(Write{Async},WriteLine{Async})File ( WriteAllLines{Async},WriteAllText{Async}) | 
| Append to a text file | File.AppendText(returnsStreamWriter)FileInfo.AppendText(returnsStreamWriter) | 
| Read from a text file | StreamReader | 
binary files
| Goal | Use | 
|---|---|
| Read from | BinaryReader | 
| Write to | BinaryWriter | 
directories
| Goal | Use | 
|---|---|
| Check for a directory | Directory.Exists(returnsbool) | 
| Create a directory | Directory.CreateDirectory(returnsDirectoryInfo) | 
| Create a subdirectory | DirectoryInfo.CreateSubdirectory(returnsDirectoryInfo) | 
| Copy a directory | Directories are copied by creating the directory in the new destination and then copying files to it | 
| Delete a directory | Directory.Delete,DirectoryInfo.Delete | 
| Move/rename a directory | Directory.Move,DirectoryInfo.MoveTo | 
Enumerating Files and Directories [ Documentation]
Enumerable collections provide superior performance vs arrays when working with large collections. The Directory and
DirectoryInfo classes have enumeration methods that return enumerable collections:
| To retrieve | Use | 
|---|---|
| Directory names | Directory.EnumerateDirectories | 
| DirectoryInfo objects | DirectoryInfo.EnumerateDirectories | 
| File names | Directory.EnumerateFiles | 
| FileInfo objects | DirectoryInfo.EnumerateFiles | 
| Directory and file names | Directory.EnumerateFileSystemEntries | 
| FileSystemInfo objects | DirectoryInfo.EnumerateFileSystemInfos | 
compression and decompression
For all examples:
using System.IO.Compression;
compression and decompression for zip files
Compression (Creating a zip file):
var startPath = "/source/directory";
var zipFilePath = "/destination/compressed.zip";
zipFile.CreateFromDirectory(startPath, zipFilePath);)
Decompression (Extracting Contents of a zip file):
var zipFilePath = "/destination/compressed.zip";
var destinationPath = "/destination/directory";
// Normalize the destination path:
destinationPath = Path.GetFullPath(destinationPath);
// If the destinationPath does not end with the directory separator character, a path traversal attack is possible:
if (!destinationPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
    destinationPath += Path.DirectorySeparatorChar;
zipFile.ExtractToDirectory(zipFilePath, destinationPath);
adding to a zip file
var zipFilePath = "/destination/compressed.zip";
using FileStream zipFilePath = new FileStream(zipFilePath, FileMode.Open);
using ZipArchive archive = new ZipArchive(zipFilePath, ZipArchiveMode.Update);
var fileEntry = archive.CreateEntry("SomeFile.txt");
using StreamWriter writer = new StreamWriter(fileEntry.Open());
writer.WriteLine("Some text...");
compression and decompression for gzip
Compression:
var fileToCompress = new FileInfo("/source/file.txt");
using FileStream originalFileStream = fileToCompress.OpenRead();
using FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz");
using GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress);
originalFileStream.CopyTo(compressionStream);
Decompression:
var fileToDecompress = new FileInfo("/source/compressed.gz");
using FileStream originalFileStream = fileToDecompress.OpenRead();
using FileStream decompressedFileStream = File.Create("/destination/decompressed.txt");
using GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress);
decompressionStream.CopyTo(decompressedFileStream);