1、使用 File.Create()创建并写入文件
要使用C# 创建文件,可以使用File.Create()
或FileStream()
方法创建文件,例如
1)使用StreamReader
using System; using System.IO; using System.Text; class Test { public static void Main() { string path = @"c:\temp\MyTest.txt"; try { // 创建文件,如果文件存在,则覆盖该文件。 using (FileStream fs = File.Create(path)) { byte[] info = new UTF8Encoding(true).GetBytes("https://www.cjavapy.com"); // 向文件中写入一些信息。 fs.Write(info, 0, info.Length); } // 打开流并读取。 using (StreamReader sr = File.OpenText(path)) { string s = ""; while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }
2)使用File.WriteAllLines
using System; using System.IO; using System.Text; class Test { public static void Main() { string path = @"c:\temp\MyTest.txt"; // 此文本只添加一次到文件中。 if (!File.Exists(path)) { // 创建一个要写入的文件。 string[] createText = { "Hello", "And", "Welcome" }; File.WriteAllLines(path, createText, Encoding.UTF8); } // 此文本总是被添加,使文件随着时间的推移而变长 string appendText = "This is extra text" + Environment.NewLine; File.AppendAllText(path, appendText, Encoding.UTF8); // 打开要从中读取的文件。 string[] readText = File.ReadAllLines(path, Encoding.UTF8); foreach (string s in readText) { Console.WriteLine(s); } } }
3)使用WriteAllText
using System; using System.IO; using System.Text; class Test { public static void Main() { string path = @"c:\temp\MyTest.txt"; // 此文本只添加一次到文件中。 if (!File.Exists(path)) { //创建一个要写入的文件。 string createText = "Hello and Welcome" + Environment.NewLine; File.WriteAllText(path, createText, Encoding.UTF8); } // 此文本总是被添加,使文件随着时间的推移而变长 string appendText = "This is extra text" + Environment.NewLine; File.AppendAllText(path, appendText, Encoding.UTF8); // 打开要从中读取的文件。 string readText = File.ReadAllText(path); Console.WriteLine(readText); } }
4)使用FileStream对象的Write()方法
using System; using System.IO; using System.Text; class Test { public static void Main() { string path = @"c:\temp\MyTest.txt"; if (!File.Exists(path)) { // 创建文件 using (FileStream fs = File.Create(path)) { Byte[] info = new UTF8Encoding(true).GetBytes("https://www.cjavapy.com"); fs.Write(info, 0, info.Length); } } // 打开文件并读取 using (FileStream fs = File.OpenRead(path)) { byte[] b = new byte[1024]; UTF8Encoding temp = new UTF8Encoding(true); while (fs.Read(b,0,b.Length) > 0) { Console.WriteLine(temp.GetString(b)); } } } }
2、使用FileStream()创建并写入文件
using System; using System.IO; class FStream { static void Main() { const string fileName = "cjavapy.dat"; // 创建要写入文件的随机数据。 byte[] dataArray = new byte[100000]; new Random().NextBytes(dataArray); using(FileStream fileStream = new FileStream(fileName, FileMode.Create)) { // 将数据逐字节写入文件。 for(int i = 0; i < dataArray.Length; i++) { fileStream.WriteByte(dataArray[i]); } // 将流位置设置为文件的开头。 fileStream.Seek(0, SeekOrigin.Begin); } } }
注意:文件写入时追加内容还可以使用AppendAllLines
、AppendAllText
、AppendText
等方法。
3、C# File和fileinfo类
两个类功能差不多,File是静态方法实现的,Fileinfo
通过实例方法实现的。FileInfo
使用示例如下,
using System; using System.IO; class Test { public static void Main() { string path = Path.GetTempFileName(); var fi1 = new FileInfo(path); // 创建写入文件 using (StreamWriter sw = fi1.CreateText()) { sw.WriteLine("Hello"); sw.WriteLine("And"); sw.WriteLine("Welcome"); } // 打开读取文件 using (StreamReader sr = fi1.OpenText()) { var s = ""; while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); } } try { string path2 = Path.GetTempFileName(); var fi2 = new FileInfo(path2); // 确保目标不存在。 fi2.Delete(); // 复制文件 fi1.CopyTo(path2); Console.WriteLine($"{path} was copied to {path2}."); // 删除创建的文件 fi2.Delete(); Console.WriteLine($"{path2} was successfully deleted."); } catch (Exception e) { Console.WriteLine($"The process failed: {e.ToString()}"); } } }