C# .Net 文件 IO 操作详细教程

在C#.net中,我们主要使用System.IO命名空间中的类来进行文件和目录的读写操作。
System.IO命名空间中主要包含了三个类:
System.IO.File: 该类提供了用于创建、复制、删除、移动、打开和关闭文件的方法。
System.IO.Directory: 该类提供了用于创建、删除、移动和枚举目录的方法。
System.IO.Path: 该类提供了用于获取文件和目录路径的方法。
下面我们就来逐一讲解这三个类中的常用函数。
System.IO.File类
Create(string path): 该方法用于创建一个新文件。如果文件已存在,则会抛出IOException异常。
CreateText(string path): 该方法用于创建一个新文本文件,并返回一个StreamWriter对象,可以用来向文件中写入文本。如果文件已存在,则会抛出IOException异常。
Copy(string sourceFileName, string destFileName): 该方法用于将源文件复制到目标文件。如果目标文件已存在,则会抛出IOException异常。
Delete(string path): 该方法用于删除指定的文件。如果文件不存在,则会抛出FileNotFoundException异常。
Exists(string path): 该方法用于检查指定的文件是否存在。
Move(string sourceFileName, string destFileName): 该方法用于将源文件移动到目标文件。如果目标文件已存在,则会抛出IOException异常。
Open(string path, FileMode mode): 该方法用于打开一个文件,并返回一个FileStream对象。参数mode用于指定打开文件的模式,可以是以下值之一:
Append: 如果文件存在,则打开文件并在文件末尾追加数据。如果文件不存在,则创建一个新文件。
Create: 创建一个新文件。如果文件已存在,则会覆盖该文件。
CreateNew: 创建一个新文件。如果文件已存在,则会抛出IOException异常。
Open: 打开一个文件。如果文件不存在,则会抛出FileNotFoundException异常。
OpenOrCreate: 如果文件存在,则打开文件。如果文件不存在,则创建一个新文件。
Truncate: 打开一个文件,并将文件的长度设置为0。如果文件不存在,则会抛出FileNotFoundException异常。
System.IO.Directory类
CreateDirectory(string path): 该方法用于创建一个新目录。
Delete(string path): 该方法用于删除指定的目录。如果目录不存在,则会抛出DirectoryNotFoundException异常。
Exists(string path): 该方法用于检查指定的目录是否存在。
GetFiles(string path): 该方法用于获取指定目录中的所有文件的文件名。
GetDirectories(string path): 该方法用于获取指定目录中的所有子目录的目录名。
Move(string sourceDirName, string destDirName): 该方法用于将源目录移动到目标目录。
System.IO.Path类
GetDirectoryName(string path): 该方法用于获取指定路径的目录名。
GetFileName(string path): 该方法用于获取指定路径的文件名。
GetExtension(string path): 该方法用于获取指定路径的文件扩展名。
GetTempPath(): 该方法用于获取临时文件夹的路径。
GetFullPath(string path): 该方法用于获取指定路径的完整路径。
现在我们已经介绍完了System.IO.File、System.IO.Directory和System.IO.Path类中的常用函数,下面我们来看一个例子,演示如何使用这些函数进行文件和目录的读写操作。
以下是一个例子,用于创建一个新文件,向文件中写入文本,然后读取文件中的文本:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 创建新文件
string fileName = "test.txt";
if (!File.Exists(fileName))
{
File.Create(fileName).Dispose();
Console.WriteLine("文件已创建");
// 向文件中写入文本
using (StreamWriter sw = File.CreateText(fileName))
{
sw.WriteLine("这是一行文本");
sw.WriteLine("这是另一行文本");
}
Console.WriteLine("文本已写入文件");
// 读取文件中的文本
string text = File.ReadAllText(fileName);
Console.WriteLine("文件中的文本:");
Console.WriteLine(text);
}
}
}
上面的代码首先使用File.Create函数创建了一个新文件,然后使用File.CreateText函数创建了一个StreamWriter对象,并使用该对象向文件中写入了两行文本。然后使用File.ReadAllText函数读取了文件中的文本,并将其输出到控制台。
下面是另一个例子,用于创建一个新目录,然后将一个文件复制到该目录中,最后删除该目录及其中的文件:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 创建新目录
string dirName = "testdir";
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
Console.WriteLine("目录已创建");
}
// 将文件复制到新目录中
string sourceFile = "test.txt";
string destFile = Path.Combine(dirName, "test.txt");
File.Copy(sourceFile, destFile);
Console.WriteLine("文件已复制到新目录中");
// 删除目录及其中的文件
Directory.Delete(dirName, true);
Console.WriteLine("目录及其中的文件已删除");
}
}
}
上面的代码首先使用Directory.CreateDirectory函数创建了一个新目录,然后使用Path.Combine函数将源文件的路径与目标目录的路径合并,得到目标文件的路径。最后使用File.Copy函数将源文件复制到目标目录中。最后使用Directory.Delete函数删除了该目录及其中的文件。
下面是另一个例子,用于枚举指定目录中的所有文件和子目录:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 枚举指定目录中的所有文件
string dirName = ".";
string[] files = Directory.GetFiles(dirName);
Console.WriteLine("当前目录中的文件:");
foreach (string file in files)
{
Console.WriteLine(file);
}
// 枚举指定目录中的所有子目录
string[] dirs = Directory.GetDirectories(dirName);
Console.WriteLine("当前目录中的子目录:");
foreach (string dir in dirs)
{
Console.WriteLine(dir);
}
}
}
}
上面的代码使用Directory.GetFiles函数枚举了当前目录中的所有文件,并将文件名输出到控制台。然后使用Directory.GetDirectories函数枚举了当前目录中的所有子目录,并将目录名输出到控制台。
下面是另一个例子,用于判断指定路径是否是文件夹或文件:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 判断指定路径是否是文件夹
string path = ".";
if (Directory.Exists(path))
{
Console.WriteLine("{0}是文件夹", path);
}
else
{
Console.WriteLine("{0}不是文件夹", path);
}
// 判断指定路径是否是文件
path = "test.txt";
if (File.Exists(path))
{
Console.WriteLine("{0}是文件", path);
}
else
{
Console.WriteLine("{0}不是文件", path);
}
}
}
}
上面的代码使用Directory.Exists函数判断指定路径是否是文件夹,如果是则输出"{path}是文件夹",否则输出"{path}不是文件夹"。然后使用File.Exists函数判断指定路径是否是文件,如果是则输出"{path}是文件",否则输出"{path}不是文件"。
下面是另一个例子,用于获取文件的属性信息:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 获取文件的属性信息
string fileName = "test.txt";
FileInfo fileInfo = new FileInfo(fileName);
Console.WriteLine("文件名:{0}", fileInfo.Name);
Console.WriteLine("文件大小:{0}", fileInfo.Length);
Console.WriteLine("文件扩展名:{0}", fileInfo.Extension);
Console.WriteLine("文件创建时间:{0}", fileInfo.CreationTime);
Console.WriteLine("文件最后访问时间:{0}", fileInfo.LastAccessTime);
Console.WriteLine("文件最后修改时间:{0}", fileInfo.LastWriteTime);
}
}
}
上面的代码使用FileInfo类获取了文件的属性信息,包括文件名、文件大小、文件扩展名、文件创建时间、文件最后访问时间和文件最后修改时间。
下面是递归枚举某目录下的所有文件夹和文件的代码示例:
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 递归枚举指定目录下的所有文件夹和文件
string dirName = ".";
EnumerateDirectory(dirName);
}
static void EnumerateDirectory(string dirName)
{
// 枚举指定目录中的所有文件
string[] files = Directory.GetFiles(dirName);
foreach (string file in files)
{
Console.WriteLine(file);
}
// 枚举指定目录中的所有子目录
string[] dirs = Directory.GetDirectories(dirName);
foreach (string dir in dirs)
{
Console.WriteLine(dir);
EnumerateDirectory(dir);
}
}
}
}
上面的代码定义了一个EnumerateDirectory函数,该函数使用Directory.GetFiles函数枚举指定目录中的所有文件,并使用Directory.GetDirectories函数枚举指定目录中的所有子目录。
C#.net中的IO操作主要通过System.IO命名空间中的类来实现,包括File类、Directory类和Path类。
File类提供了对文件进行读写、拷贝、删除、获取属性信息等操作的方法,例如File.ReadAllText、File.WriteAllText、File.Copy、File.Delete和FileInfo类。
Directory类提供了对目录进行创建、删除、枚举文件和子目录等操作的方法,例如Directory.CreateDirectory、Directory.Delete、Directory.GetFiles和Directory.GetDirectories。
Path类提供了获取文件或目录的路径信息、合并路径、提取文件扩展名等操作的方法,例如Path.GetFullPath、Path.Combine、Path.GetExtension。
此外,C#.net还提供了对XML文件的读写操作,可以使用XmlDocument类和相关的函数进行操作。
最后,C#.net还可以使用DllImport特性和相关的函数来读写INI文件。
希望本文能帮助你更好地理解C#.net中的IO操作。
 

猜你喜欢

转载自blog.csdn.net/zcr_59186/article/details/128514333