C#文件和目录操作

文件与目录操作

System.IO命名空间中有一些可以进行文件和目录操作(例如复制和移动、创建目录,以及设置文件的属性和权限)的实用类型。对于大多数的特性我们都有两种选择:一种是静态方法,而另一种则是实例方法。

静态类:FileDirectory,还有Path用于处理文件名称或者目录路径。

实例方法类(使用文件或者目录创建):FileInfoDirectoryInfo

File类

提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建 FileStream 对象。

File.Exists(string)方法

使用File.Exists(path)可以检测文件是否存在,如果存在返回true,否则返回false

string path = @"d:\temp\MyTest.txt";

if (!File.Exists(path))
{
    // ...
}

File.OpenText(String) 方法

打开一个UTF8编码的文本文件以进行读取。

using (StreamReader sr = File.OpenText(path))
{
    string s = "";
    while ((s = sr.ReadLine())!=null)
    {
        Console.WriteLine(s);
    }
}

File.CreateText(String) 方法

创建或打开用于写入 UTF-8 编码文本的文件。 如果该文件已存在,将覆盖其内容。

// 定义文件路径
string path = @"d:\temp\mytest.txt";
if (!File.Exists(path))
{
    // 如果文件不存在创建文件并写入
    using (StreamWriter sw = File.CreateText(path))
    {
        sw.WriteLine("hello");
        sw.WriteLine("And");
        sw.WriteLine("Welcome");
    }
}

File.AppendAllLines 方法

向一个文件中追加行,然后关闭该文件。 如果指定文件不存在,此方法会创建一个文件,向其中写入指定的行,然后关闭该文件。

AppendAllLines(String, IEnumerable<String>)

使用指定的编码向一个文件中追加行,然后关闭该文件。 如果指定文件不存在,此方法会创建一个文件,向其中写入指定的行,然后关闭该文件。

AppendAllLines(String, IEnumerable<String>, Encoding)

如果文件不存在,则该方法将创建该文件,但不会创建新的目录。 因此,参数的值 path 必须包含现有目录。

string dataPath = @"d:\temp\timestamps.txt";
CreateSample(dataPath);

var JulyWeekends = from line in File.ReadLines(dataPath)
                    where (line.StartsWith("2")
                    || line.StartsWith("Sunday"))
                    & line.Contains("9")
                    select line;

File.WriteAllLines(@"d:\temp\selectedDays.txt", JulyWeekends);

var MarchMondays = from line in File.ReadLines(dataPath)
                    where line.StartsWith("1") &&
                    line.Contains("9")
                    select line;
File.AppendAllLines(@"d:\temp\selectedDays.txt", MarchMondays);

static void CreateSample(string dataPath)
{
    DateTime TimeStamp = new DateTime(1700, 1, 1);

    using (StreamWriter sw = new StreamWriter(dataPath))
    {
        for (int i = 0; i < 500; i++)
        {
            DateTime TS1 = TimeStamp.AddYears(i);
            DateTime TS2 = TS1.AddMonths(i);
            DateTime TS3 = TS2.AddDays(i);
            sw.WriteLine(TS3.ToLongDateString());
        }
    }
}

更多方法参考File类的方法

Directory类和DirectoryInfo

如何从目录中检索所有文本,并将其移动到新目录。

string sourceDirectory = @"d:\temp\current";
string archiveDirectory = @"d:\temp\archive";

if (!Directory.Exists(sourceDirectory))
{
    Directory.CreateDirectory(sourceDirectory);
    Console.WriteLine("Create sourceDirectory successed!");
}
if (!Directory.Exists(archiveDirectory))
{
    Directory.CreateDirectory(archiveDirectory);
    Console.WriteLine("Create archiveDirectory successed!");
}

try
{
    var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");
    foreach (string currentFile in txtFiles)
    {
        string filename = currentFile.Substring(sourceDirectory.Length + 1);
        Directory.Move(currentFile, Path.Combine(archiveDirectory, filename));
    }
}
catch (Exception e)
{

    Console.WriteLine(e.Message); ;
}

Directory.CreateDirectory方法

在指定路径中创建所有目录和子目录,除非它们已经存在。

Directory.Delete 方法

删除指定目录及(可选地)删除其任意子目录。

创建目录并删除。

string path = @"d:\tmp\mydir\mydircdr";

try
{
    if (Directory.Exists(path))
    {
        Console.WriteLine("That path exists already.");
        return;
    }

    // try to create the directory
    DirectoryInfo di = Directory.CreateDirectory(path);
    Console.WriteLine("The director was created successfully at {0}.", Directory.GetCreationTime(path));

    // delete the diectory
    di.Delete();
    Console.WriteLine("The directory was deleted successfully.");
}
catch (Exception e)
{

    Console.WriteLine("The process failed: {0}", e.ToString());
}

Directory.EnumerateDirectories 方法

返回指定路径中的目录完整名称的可枚举集合。

Directory.Exists 方法

确定给定路径是否引用磁盘上的现有目录。

Directory.GetDirectories 方法

确定给定路径是否引用磁盘上的现有目录。

更多方法参考Directory类的方法

FileInfo类和DirectoryInfo类

FileDirectory类型的静态方法便于操作单个文件或目录。但是如果要针对一个项目进行一系列调用,则FileInfoDirectoryInfo类提供的对象模型更加适合。

FileInfo类以实例成员的形式提供了File类型静态方法的大部分功能。此外还包含一些额外的属性,如ExtensionsLengthIsReadOnly以及Directory(返回一个DirectoryInfo对象)。

FileInfo fileInfo = new FileInfo(@"d:\temp\FileInfo.txt");
Console.WriteLine(fileInfo.Exists); // False

using (TextWriter w = fileInfo.CreateText())
{
    w.Write("some text");
}
Console.WriteLine(fileInfo.Exists); //False
fileInfo.Refresh();
Console.WriteLine(fileInfo.Exists); // True
Console.WriteLine(fileInfo.Name); // FileInfo.txt
Console.WriteLine(fileInfo.FullName); // d:\temp\FileInfo.txt
Console.WriteLine(fileInfo.DirectoryName); // d:\temp
Console.WriteLine(fileInfo.Directory.Name); // temp
Console.WriteLine(fileInfo.Extension); // .txt
fileInfo.Attributes = FileAttributes.Hidden; 
fileInfo.IsReadOnly = false; 
Console.WriteLine(fileInfo.Attributes); // ReadOnly, Hidden
Console.WriteLine(fileInfo.CreationTime); // 2022 / 2 / 4 16:09:29

fileInfo.MoveTo(@"d:\temp\FileInfoX.txt");
DirectoryInfo directoryInfo = fileInfo.Directory;
Console.WriteLine(directoryInfo.Name); // temp
Console.WriteLine(directoryInfo.FullName); // d:\temp
Console.WriteLine(directoryInfo.Parent.FullName); // d:\
directoryInfo.CreateSubdirectory("SubFolder");

查看指定目录下的文件和目录:

DirectoryInfo directoryInfo = new DirectoryInfo(@"d:\temp");
foreach (FileInfo file in directoryInfo.GetFiles("*.txt"))
{
    Console.WriteLine(file.Name);
}

foreach (DirectoryInfo sunDir in directoryInfo.GetDirectories())
{
    Console.WriteLine(sunDir.Name);
}
posted @ 2022-02-04 14:30  Apostle浩  阅读(377)  评论(0编辑  收藏  举报