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()}");
}
}
}