codestory

Manipulieren von Dateien und Verzeichnissen in C#

  1. Das hierarchische System der Klasse
  2. File
  3. Directory
  4. FileInfo
  5. DirectoryInfo
  6. DriveInfo

1. Das hierarchische System der Klasse

Class
Description
File
File is a utility class. It provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of FileStreamobjects.
Directory
Directory is a utility class, It provides static methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.
FileInfo
FileInfo is a class that represents a file. It provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of FileStream objects. This class cannot be inherited.
DirectoryInfo
DirectoryInfo is a class representing a directory. It provides methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.
DriveInfo
DirveInfo is a class, it provides access to information on a drive.

2. File

File ist eine Utility-Klasse. Sie bietet die static Methode zur Erstellung, Kopie, Lösch, Bewegung und Öffnung einer File. und unterstützt bei der Erstellung des Objekt FileStream.
Das folgende Beispiel prüft, ob der Pfad der File existiert oder nicht. Wenn ja, lösch die File
DeleteFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DeleteFileDemo
    {
        public static void Main(string[] args)
        {
            string filePath = "C:/test/test.txt";

            // Prüfen, ob der Pfad existiert oder nicht?
            if (File.Exists(filePath))
            {
                // Die File löschen
                File.Delete(filePath);

                // Prüfen, ob die File existiert oder nicht
                if (!File.Exists(filePath))
                {
                    Console.WriteLine("File deleted...");
                } 
            }
            else
            {
                Console.WriteLine("File test.txt does not yet exist!");
            } 
            Console.ReadKey();
        }
    } 
}
Das Beispiel durchführen
File deleted...
Die Änderung des Filenamen kann die Bewegung der File zum anderen Ordner und die Änderung des Filename einschließen. Falls die File in anderen Ordner bewegt wird, stellen Sie sicher, dass der neue Ordner existiert.
RenameFileDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameFileDemo
    {
        public static void Main(string[] args)
        {
            String filePath = "C:/test/test.txt";

            if (File.Exists(filePath))
            {
                Console.WriteLine(filePath + " exist");  
                Console.WriteLine("Please enter a new name for this file:");
                
                // Ein String, das der Benutzer eingibt.
                // Zum Beispiel: C:/test/test2.txt
                string newFilename = Console.ReadLine(); 
                if (newFilename != String.Empty)
                {
                    // Den Name der File ändern:
                    // Kann umfassen: die File in einem anderen Vaterverzeichnis schieben 
                    // und den Name der File ändern.
                    // Muss guarantieren, der Vaterverzeichnis existiert. 
                    // (wenn nicht, wird die Ausnahme DirectoryNotFoundException geworfen).
                    File.Move(filePath, newFilename);

                    if (File.Exists(newFilename))
                    {
                        Console.WriteLine("The file was renamed to " + newFilename); 
                    }
                }
            }
            else
            {
                Console.WriteLine("Path " + filePath + " does not exist.");
            } 
            Console.ReadLine();
        }
    } 
}
Das Beispiel durchführen
C:/test/test.txt exist
Please enterr a new name for this file:
C:/test/test2.txt
The file was renamed to C:/test/test2.txt

3. Directory

Directory ist eine Utility Klasse. Er bietet die static Methode um die Ordner und die untergeordneten Ordner zu erstellen, bewegen und listieren. Die Klass darf keine untergeordneten Klassen haben
Zum Beispiel: Überprüfen, ob der Pfad des Ordner existiert oder nicht. Wenn nicht, die Information der Erstellungszeitpunkt, des letzten Eingabe in der Ordner aufschreiben
DirectoryInformationDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DirectoryInformationDemo
    {
        public static void Main(string[] args)
        {
            String dirPath = "C:/test/CSharp";

            // Prüfen, ob der Pfad existiert oder nicht.
            bool  exist = Directory.Exists(dirPath);

            // Wenn nicht, den Verzeichnis erstellen.
            if (!exist)
            {
                Console.WriteLine(dirPath + " does not exist.");
                Console.WriteLine("Create directory: " + dirPath);

                // Den Verzeichnis erstellen.
                Directory.CreateDirectory(dirPath);
            } 
            Console.WriteLine("Directory Information " + dirPath);

            // Die Information des obengemeinten Verzeichnis ausdrucken.
            // Die Zeitspunkt der Erstellung des Verzeichnis.
            Console.WriteLine("Creation time: "+ Directory.GetCreationTime(dirPath));

            // In der letzte Zeitpunkt: der Verzeichnis hat eine Änderung.
            Console.WriteLine("Last Write Time: " + Directory.GetLastWriteTime(dirPath));

            // Der Vaterverzeichnis
            DirectoryInfo parentInfo = Directory.GetParent(dirPath); 
            Console.WriteLine("Parent directory: " + parentInfo.FullName); 
            Console.Read();
        }
    } 
}
Das Beispiel durchführen
Directory Information C:/test/CSharp
Creation time: 12/5/2015 9:46:10 PM
Last Write Time: 12/5/2015 9:46:10 PM
Parent directory: C:\test
Den Name des Ordner ändern
Sie können den Name des Ordner ändern. Das kann diesen Ordner aus der Vaterordner verlassen. Aber Sie müssen guarantieren, dass der neue Ordner schon existiert. Das folgende Beispiel bezeichnet die Änderung eines Ordnername
RenameDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameDirectoryDemo
    {
        public static void Main(string[] args)
        {
            // Ein Pfad zum Verzeichnis.
            String dirPath = "C:/test/CSharp";

            // Wenn der Pfad existiert.
            if (!Directory.Exists(dirPath))
            {
                Console.WriteLine(dirPath + " does not exist.");
                Console.Read();  
                return;
            }  
            Console.WriteLine(dirPath + " exist"); 
            Console.WriteLine("Please enter a new name for this directory:");

            // String, das der Benutzer erstellt.
            // Zum Beispiel: C:/test2/Java
            string newDirname = Console.ReadLine();

            if (newDirname == String.Empty)
            {
                Console.WriteLine("You not enter new directory name. Cancel rename.");
                Console.Read(); 
                return;
            } 
            // Wenn der Pfad, den der Benutzer eingibt, existiert.
            if (Directory.Exists(newDirname))
            {
                Console.WriteLine("Cannot rename directory. New directory already exist.");
                Console.Read(); 
                return;
            } 
            // Der Vaterverzeichnis.
            DirectoryInfo parentInfo = Directory.GetParent(newDirname);

            // Den Vaterverzeichnis vom Verzeichnis, den der Benutzer eingibt erstellen.
            Directory.CreateDirectory(parentInfo.FullName);

            // Sie können den Pfad (path) vom Verzeichnis verändern aber müssen guarantieren, 
            // dass der Vaterpfad des neuen Pfad existieren muss.
            // Wenn nicht, wird die Ausnahme DirectoryNotFoundException geworfen).
            Directory.Move(dirPath, newDirname);

            if (Directory.Exists(newDirname))
            {
                Console.WriteLine("The directory was renamed to " + newDirname);
            } 
            Console.ReadLine();
        }
    } 
}
Das Beispiel durchführen
C:/test/CSharp exist
Please enter a new name for this directory:
C:/test2/Java
The directory was renamed to C:/test2/Java
Das folgende Beispeil druckt alle Nachkommenordner (Kind, Enkel,...) eines Ordner aus
EnumeratingDirectoryDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class EnumeratingDirectoryDemo
    {
        public static void Main(string[] args)
        {
            string dirPath = "C:/Windows/System32"; 
            PrintDirectory(dirPath); 
            Console.Read();
        } 
        // Recursive listiert die Sub-verzeichnise eines Verzeichnis.
        public static void PrintDirectory(string dirPath)
        {
            try
            {
                // Wenn Sie keinen Zugriffsberechtigung in dem Verzeichnis 'dirPath' hat, 
                // wird eine Ausnahme UnauthorizedAccessException geworfen.
                IEnumerable<string> enums = Directory.EnumerateDirectories(dirPath); 
                List<string> dirs = new List<string>(enums); 
                foreach (var dir in dirs)
                {
                    Console.WriteLine(dir); 

                    PrintDirectory(dir);
                }
            }
            // Der Sicherheitsfehler passiert beim Zugang in dem Verzeichnis, 
            // dazu Sie zugriffsberechtig nicht sind.
            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine("Can not access directory: " + dirPath);
                Console.WriteLine(e.Message);
            }
        }
    } 
}
Das Beispiel durchführen
...
C:/Windows/System32\wbem\en-US
C:/Windows/System32\wbem\Logs
C:/Windows/System32\wbem\Repository
C:/Windows/System32\wbem\tmf
C:/Windows/System32\wbem\eml
C:/Windows/System32\WCN
C:/Windows/System32\WCN\en-US
...

4. FileInfo

FileInfo ist eine Klasse zur Vertretung einer File. Er bietet die Attribute, die Methode um die FIle zu erstellen, kopieren, löschen, bewegen und öffnen. Er unterstützt bei der Erstellung des Objekt. Diese Klasse darf keine untergeordnete Klasse haben
Der Unterschied zwischen 2 Klasse File und FileInfo liegt, dass File ist eine Utility-Klasse, seine allen Methode sind static , Und FileInfo vertretet eine bestimmten FIle
FileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace FileDirectoryTutorial
{
    class FileInfoDemo
    {
        static void Main(string[] args)
        {
            // Ein Objekt vertritt eine File .
            FileInfo testFile = new FileInfo("C:/test/test.txt");  
            if (testFile.Exists)
            {
                Console.WriteLine(testFile.FullName + " exist."); 
                // Die Information über die Zeitpunkt der Fileerstellung.
                Console.WriteLine("Creation time: " + testFile.CreationTime);

                // Die Information über die Zeitpunkt der letzte Filebearbeitung.
                Console.WriteLine("Last Write Time " + testFile.LastWriteTime);

                // Der Name der Verzeichnis enthaltet diese File .
                Console.WriteLine("Directory Name: " + testFile.DirectoryName);
            }
            else
            {
                Console.WriteLine(testFile.FullName + " does not exist.");
            }
            Console.Read();
        } 
    } 
}
Das Beispiel durchführen
C:\test\test.txt exist.
Creation time: 12/5/2015 7:47:40 PM
Last Write Time 12/5/2015 10:17:29 PM
Directory Name: C:\test
Die Änderung des Filename kann die Filebewegung zum anderen Ordner und die Änderung des Filename einschließen. Falls die FIle zum anderen Ordner bewegt wird, guarantieren Sie,dass der neue Ordner schon existiert.
RenameFileInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class RenameFileInfoDemo
    {
        public static void Main(string[] args)
        { 
            FileInfo fileInfo = new FileInfo("C:/test/test.txt"); 
            if (!fileInfo.Exists)
            {
                Console.WriteLine(fileInfo.FullName + " does not exist.");
                Console.Read(); 
                return;
            } 
            Console.WriteLine(fileInfo.FullName + " exist");  
            Console.WriteLine("Please enter a new name for this file:");

            // Ein String, das Benutzer eingibt.
            // Zum Beispiel: C:/test/test2.txt
            string newFilename = Console.ReadLine();

            if (newFilename == String.Empty)
            {
                Console.WriteLine("You not enter new file name. Cancel rename"); 
                Console.Read(); 
                return;
            } 
            FileInfo newFileInfo = new FileInfo(newFilename);

            // Wenn 'newFileInfo' existiert (den Name nicht ändern  können).
            if (newFileInfo.Exists)
            {
                Console.WriteLine("Can not rename file to " + newFileInfo.FullName + ". File already exist."); 
                Console.Read(); 
                return;
            } 
            // Den Vaterverzeichnis vom 'newFileInfo' erstellen.
            newFileInfo.Directory.Create();

            // Den Name der File verändern
            fileInfo.MoveTo(newFileInfo.FullName);

            // Refresh. 
            newFileInfo.Refresh();

            if (newFileInfo.Exists)  
            {
                Console.WriteLine("The file was renamed to " + newFileInfo.FullName);
            }  
            Console.ReadLine();
        }
    } 
}
Das Beispiel durchführen
C:\test\test.txt exist
Please enter a new name for this file:
C:/test2/test2.txt
The file was renamed to C:\test2\test2.txt

5. DirectoryInfo

DirectoryInfo ist eine Klasse zur Vertretung eines Ordner. Er bietet die Methode um die Ordner und die untergeordneten Ordner zu erstellen, bewegen, listieren. Diese Klass darf keine untergeordneten Klasse haben.
Der Unterschied zwischen die Klasse Directory und DirectoryInfo liegt, dass Directory ist eine Utility-Klasse, alle Methode sind static. Und DirectoryInfo vertretet einen bestimmten Ordner
DirectoryInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DirectoryInfoDemo
    {
        static void Main(string[] args)
        {
            // Ein Objekt vertritt einen Verzeichnis.
            DirectoryInfo dirInfo = new DirectoryInfo("C:/Windows/System32/drivers");

            // Die Information aufschreiben
            // Die Information über das Datum der Fileerstellung.
            Console.WriteLine("Creation time: " + dirInfo.CreationTime);

            // Die Information über die letzte Filebearbeitung.
            Console.WriteLine("Last Write Time " + dirInfo.LastWriteTime);

            // Der Name des Verzeichnis.
            Console.WriteLine("Directory Name: " + dirInfo.FullName);

            // Ein Array vom Sub-Verzeichnis.
            DirectoryInfo[] childDirs = dirInfo.GetDirectories();

            // Ein Array der File in Verzeichnis
            FileInfo[] childFiles = dirInfo.GetFiles(); 
            foreach(DirectoryInfo childDir in childDirs ){
                Console.WriteLine(" - Directory: " + childDir.FullName);
            } 
            foreach (FileInfo childFile in childFiles)
            {
                Console.WriteLine(" - File: " + childFile.FullName);
            } 
            Console.Read();
        }
    } 
}
Das Beispiel durchführen
Creation time: 7/14/2009 10:20:14 AM
Last Write Time 11/21/2010 2:06:51 PM
Directory Name: C:\Windows\System32\drivers
 - Directory: C:\Windowws\System32\drivers\en-US
 - File: C:\Windowws\System32\gm.dls
 - File: C:\Windowws\System32\gmreadme.txt
 - File: C:\Windowws\System32\winmount.sys

6. DriveInfo

DirveInfo ist eine Klasse, er bietet die Methode zum Zugang der Festplatte.
DriveInfoDemo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileDirectoryTutorial
{
    class DriveInfoDemo
    {
        static void Main(string[] args)
        {
            DriveInfo[] drives = DriveInfo.GetDrives(); 
            foreach (DriveInfo drive in drives)
            {
                Console.WriteLine(" ============================== "); 
                // Der Name der Diskplatte (C, D, ..)
                Console.WriteLine("Drive {0}", drive.Name);

                // Diskplattestyp (Removable,..)
                Console.WriteLine("  Drive type: {0}", drive.DriveType);

                // Wenn die Diskplatt bereit ist.
                if (drive.IsReady)
                {
                    Console.WriteLine("  Volume label: {0}", drive.VolumeLabel);
                    Console.WriteLine("  File system: {0}", drive.DriveFormat);
                    Console.WriteLine(
                        "  Available space to current user:{0, 15} bytes",
                        drive.AvailableFreeSpace);

                    Console.WriteLine(
                        "  Total available space:          {0, 15} bytes",
                        drive.TotalFreeSpace);

                    Console.WriteLine(
                        "  Total size of drive:            {0, 15} bytes ",
                        drive.TotalSize);
                }
            } 
            Console.Read();
        }
    } 
}
Das Beispiel durchführen