Member | Description |
|---|---|
CopyTo | Copies a file to the new path and file name specified as a parameter. It also returns a new FileInfo object that represents the new (copied) file. You can supply an optional additional parameter of true to allow overwriting. |
Create and CreateText | Create creates the specified file and returns a FileStream object that you can use to write to it. CreateText performs the same task, but returns a StreamWriter object that wraps the stream. |
Open, OpenRead, OpenText, and OpenWrite | Open a file (provided it exists). OpenRead and OpenText open a file in read-only mode, returning a FileStream or a StreamReader object. OpenWrite opens a file in write-only mode, returning a FileStream. |
Delete | Removes the file, if it exists. |
MoveTo | Moves the file to the new path and file name specified as a parameter. MoveTo can also be used to rename a file without changing its location. |
Member | Description |
|---|---|
Create | Creates the specified directory. If the path specifies multiple directories that don't exist, they will all be created at once. |
CreateSubdirectory | Creates a directory with the specified name in the directory represented by the DirectoryInfo object. It also returns a new DirectoryInfo object that represents the subdirectory. |
Delete | Removes the directory, if it exists. If you want to delete a directory that contains other directories, you must use the overloaded Delete method that accepts a parameter named recursive and set it to true. |
MoveTo | Moves the directory (contents and all) to a new path. MoveTo can also be used to rename a directory without changing its location. |
One useful feature that's missing from the DirectoryInfo class is a copy method. Fortunately, you can write this logic easily enough by relying on recursive logic and the FileInfo object. Here's a helper function that can copy any directory, and its contents:
using System;
using System.IO;
public class FileSystemUtil {
public static void CopyDirectory(DirectoryInfo source,
DirectoryInfo destination) {
if (!destination.Exists) {
destination.Create();
}
// Copy all files.
FileInfo[] files = source.GetFiles();
foreach (FileInfo file in files) {
file.CopyTo(Path.Combine(destination.FullName, file.Name));
}
// Process sub-directories.
DirectoryInfo[] dirs = sourceDir.GetDirectories();
foreach (DirectoryInfo dir in dirs) {
// Get destination directory.
string destinationDir = Path.Combine(destination.FullName,
dir.Name);
// Call CopyDirectory() recursively.
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
}
Here's a simple test application that copies directories based on the supplied command-line arguments:
public class CopyDir {
private static void Main(string[] args) {
if (args.Length != 2) {
Console.WriteLine("usage: " +
"CopyDir [sourcePath] [destinationPath]");
return;
}
DirectoryInfo sourceDir = new DirectoryInfo(args[0]);
DirectoryInfo destinationDir = new DirectoryInfo(args[1]);
FileSystemUtil.CopyDirectory(new DirectoryInfo(sourceDir),
new DirectoryInfo(destinationDir));
Console.WriteLine("Copy complete.");
Console.ReadLine();
}
}
RSS Feed (xml)


No comments:
Post a Comment