在本文中,我们展示了如何在C#中处理文件。我们创建文件、读取文件、删除文件、写入文件和附加到文件。
要在C#中处理文件,我们使用System.IO
和System.Text
命名空间。
System.IO
的File
类提供了创建、复制、删除、移动和打开单个文件的静态方法。它还有助于创建FileStream
对象。
.NET中也有类似的FileInfo
。FileInfo
是表示文件的文件实例,而File
是用于处理任何文件的实用程序类。
words.txt文件
这是我们在某些示例中使用的文本文件。
sky blue cloud raisin tree falcon owl eagle rock water lake
C#文件.创建
File.create
创建或覆盖指定路径中的文件。它返回一个FileStream
,它提供对路径中指定文件的读/写访问。
using System.Text; var path = "words.txt"; using FileStream fs = File.Create(path); byte[] data = Encoding.UTF8.GetBytes("falcon\nribbon\ncloud"); fs.Write(data, 0, data.Length); Console.WriteLine("data written to file");
该示例创建一个文件并向其中写入三个单词。
using FileStream fs = File.Create(path);
我们创建一个文件并将文件流检索到该文件。
byte[] data = Encoding.UTF8.GetBytes("falcon\nribbon\ncloud");
我们使用Encoding.UTF8.GetBytes
获取要写入的三个单词的字节数。
fs.Write(data, 0, data.Length);
使用Write
将字节写入文件。
C#File.CreateText
File.CreateText
创建或打开用于写入UTF-8编码文本的文件。如果该文件已经存在,则其内容将被覆盖。它返回一个使用UTF-8编码写入指定文件的StreamWriter
。
var path = "words.txt"; using StreamWriter sw = File.CreateText(path); sw.WriteLine("falcon"); sw.WriteLine("sky"); sw.WriteLine("cloud"); Console.WriteLine("data written to file");
该示例使用File.CreateText
创建了一个新文件。它用WriteLine
写入三个单词。
C#文件.复制
File.copy
将现有文件复制到新文件。它以源文件和目标文件为参数。
var sourcePath = "words.txt"; var destPath = "words_bck.txt"; File.Copy(sourcePath, destPath); Console.WriteLine("file copied");
该示例复制一个文本文件。
C#文件.移动
File.Move
将指定文件移动到新位置。使用此方法,我们可以将文件移动到新位置或重命名文件。
var sourcePath = "words.txt"; var destPath = "data.txt"; File.Move(sourcePath, destPath); Console.WriteLine("file moved");
该示例将words.txt
重命名为data.txt
。
C#File.Exists
File.Exists
判断指定的文件是否存在。
var path = "words2.txt"; if (File.Exists(path)) { Console.WriteLine("the file exists"); } else { Console.WriteLine("the file does not exist"); }
在代码示例中,我们检查words2.txt
文件是否存在。
C#文件.删除
File.Delete
删除指定的文件。
var path = "words.txt"; File.Delete(path); Console.WriteLine("file deleted");
该示例删除一个文本文件。
C#File.GetCreationTime
File.GetCreationTime
返回指定文件或目录的创建日期和时间。
var path = "words.txt"; DateTime dt = File.GetCreationTime(path); Console.WriteLine($"Creation time: {dt}");
该示例打印words.txt
文件的创建时间。
$ dotnet run Creation time: 6/21/2020 10:41:16 AM
C#文件.GetLastWriteTime
File.GetLastWriteTime
返回最后写入指定文件或目录的日期和时间。
var path = "words.txt"; DateTime dt = File.GetLastWriteTime(path); Console.WriteLine($"Last write time: {dt}");
该示例打印文本文件的最后写入时间。
C#文件.打开
File.Open
在指定路径上打开一个FileStream
。File.Open
的重载方法允许指定文件模式(Open、Create、CreateNew、Truncate、Append或OpenOrCreate),文件访问(Read、Write、ReadWrite)。
文件共享值指定其他线程对文件的访问类型,例如删除、无、读取、读写、写入或可继承。
using System.Text; var path = "words.txt"; using FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read); byte[] buf = new byte[1024]; int c; while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
该示例读取words.txt
文件的内容。
using FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read);
我们打开文件进行阅读。
byte[] buf = new byte[1024]; int c;
我们创建一个字节缓冲区和一个辅助变量。
while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
Read
方法从流中读取一个字节块并将数据写入给定的缓冲区。Encoding.UTF8.GetString
将字节序列解码为字符串。
$ dotnet run sky blue cloud raisin tree falcon owl eagle rock water lake
C#File.OpenRead
File.OpenRead
打开现有文件进行读取。它返回指定路径上的只读FileStream
。它是File.Open
的便捷方法。
using System.Text; var path = "words.txt"; using FileStream fs = File.OpenRead(path); byte[] buf = new byte[1024]; int c; while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
该示例使用File.OpenRead
读取文件。
C#File.OpenText
File.OpenText
打开现有的UTF-8编码文本文件进行阅读。它返回指定路径上的StreamReader
。
var path = "words.txt"; using StreamReader sr = File.OpenText(path); string s = String.Empty; while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); }
该示例打开一个文本文件并读取其内容。
while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); }
我们逐行读取文本文件。我们不必自己将字节解码为字符串。
C#文件.OpenWrite
File.OpenWrite
打开现有文件或创建新文件以进行写入。它返回指定路径上具有写入权限的FileStream
对象。
var path = "langs.txt"; using FileStream fs = File.OpenWrite(path); using StreamWriter sr = new StreamWriter(fs); sr.WriteLine("PHP\nDart\nJava\nC#\n"); Console.WriteLine("data written");
该示例以写模式打开一个文件并向该文件写入一行。
using FileStream fs = File.OpenWrite(path); using StreamWriter sr = new StreamWriter(fs);
我们打开指定路径的文件流。流被传递给StreamWriter
,后者用于以特定编码(默认为UTF8)写入字符。
sr.WriteLine("PHP\nDart\nJava\nC#\n");
使用WriteLine
将一行文本写入文件。
C#File.ReadLines
File.ReadLines
打开一个文本文件,将文件的所有行读入一个字符串数组,然后关闭文件。
var path = "words.txt"; var lines = File.ReadLines(path); foreach (var line in lines) { Console.WriteLine(line); }
该示例读取文本文件的所有行。使用foreach
循环遍历返回的字符串数组。
C#文件.ReadAllText
File.ReadAllText
打开一个文本文件,将文件中的所有文本读入一个字符串,然后关闭文件。请注意,此方法不应用于非常大的文件。
var path = "words.txt"; string readText = File.ReadAllText(path); Console.WriteLine(readText);
该示例一次性将整个文本读入一个字符串。
C#文件.ReadAllBytes
File.ReadAllBytes
打开一个二进制文件,将文件内容读入字节数组,然后关闭文件。
var path = "favicon.ico"; byte[] data = File.ReadAllBytes(path); int i = 0; foreach (byte c in data) { Console.Write("{0:X2} ", c); i++; if (i % 10 == 0) { Console.WriteLine(); } }
该示例读取favicon.ico
二进制文件。数据以十六进制格式打印到控制台。
$ dotnet run 00 00 01 00 01 00 10 10 00 00 00 00 00 00 68 05 00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00 00 00 01 00 08 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 4D 45 3D 00 00 00 00 00 00 00 ...
C#文件.WriteAllText
File.WriteAllText
创建一个新文件,将内容写入文件,然后关闭文件。如果目标文件已经存在,则会被覆盖。
var path = "words.txt"; string data = "sky\ncloud\nfalcon\nowl\ncrane"; File.WriteAllText(path, data); Console.WriteLine("data written");
在示例中,我们使用File.WriteAllText
将四个单词写入一个文件。
C#文件.WriteAllLines
File.WriteAllLines
创建一个新文件,将一个或多个字符串写入该文件,然后关闭该文件。
using System.Text; var path = "words.txt"; string[] data = { "sky", "cloud", "falcon", "hawk" }; File.WriteAllLines(path, data, Encoding.UTF8); Console.WriteLine("data written");
在示例中,我们有一个字符串数组。我们使用File.WriteAllLines
将这些字符串一次性写入文件。
C#文件.WriteAllBytes
File.WriteAllBytes
创建一个新文件,将指定的字节数组写入文件,然后关闭文件。
using System.Text; var path = "words.txt"; var text = "falcon\nhawk\nforest\ncloud\nsky"; byte[] data = Encoding.UTF8.GetBytes(text); File.WriteAllBytes(path, data); Console.WriteLine("data written");
该示例使用File.WriteAllBytes
将数据写入文件。
var text = "falcon\nhawk\nforest\ncloud\nsky"; byte[] data = Encoding.UTF8.GetBytes(text);
首先,我们使用Encoding.UTF8.GetBytes
将文本数据转换为字节数组。
File.WriteAllBytes(path, data);
然后我们使用File.WriteAllBytes
将数组写入文件。
C#File.AppendText
File.AppendText
创建一个StreamWriter
将UTF-8编码文本附加到现有文件,或者如果指定文件不存在则附加到新文件。
var path = "words.txt"; using StreamWriter sw = File.AppendText(path); sw.WriteLine("sky"); sw.WriteLine("lake");
该示例将两个单词附加到words.txt
文件。
C#File.AppendAllText
File.AppendAllText
将指定的字符串附加到文件。如果文件不存在,则创建该文件。
var path = "words.txt"; var contents = "armour\nsword\narrow\n"; File.AppendAllText(path, contents); Console.WriteLine("text appended to file");
该示例将三个单词附加到指定的文本文件。
C#File.AppendAllLines
File.AppendAllLines
将行附加到文件,然后关闭文件。
var path = "words.txt"; var data = new List<string> {"brown", "blue", "khaki"}; File.AppendAllLines(path, data); Console.WriteLine("data written to file");
该示例使用File.AppendAllLines
将字符串列表附加到文件。
在本文中,我们使用了C#中的文件。我们使用了System.IO
的File
类。
列出所有C#教程。