01:文件操作
//创建一个Player.text 文件
static void Main(string[] args)
{
FileInfo info = new FileInfo("Player.txt"); //使用FileInfo查看文件属性
Console.WriteLine(info.Exists);//文件是否存在
Console.WriteLine(info.Directory);//获取文件父路径
Console.WriteLine(info.Name); //文件名
Console.WriteLine(info.Length);//文件大小
Console.WriteLine(info.IsReadOnly);//是否只读
FileInfo newinfo = new FileInfo("test.txt");
if (newinfo.Exists==false)
{
newinfo.Create(); //创建文件
}
//重命名文件
newinfo.MoveTo("托尔斯泰.txt");
Console.ReadKey();
}
02:文件夹操作
static void Main(string[] args)
{
FileDirectory();
Console.ReadKey();
}
//文件夹操作
public static void FileDirectory()
{
DirectoryInfo info=new DirectoryInfo(@"C:\Users\911512\source\repos\设计模式\文件操作\bin\Debug");
Console.WriteLine(info.Name);
Console.WriteLine(info.Parent);//父路径
Console.WriteLine(info.Exists);
DirectoryInfo newInfo=new DirectoryInfo("newinfo");
if (newInfo.Exists==false)
{
newInfo.Create();
newInfo.CreateSubdirectory("哈哈"); //创建子目录
}
}
03:File读取文件
public static void File()
{
//读取所有行
string strs =System.IO.File.ReadAllText("Player.txt");
Console.WriteLine(strs);
//读取所有行
string[] s=System.IO.File.ReadAllLines("Player.txt");
foreach (var item in s)
{
Console.WriteLine(item+":");
}
//读取二进制文件
byte[] bytes=System.IO.File.ReadAllBytes("保卫萝卜.png");
string str=System.Text.Encoding.Default.GetString(bytes);
//创建一个新文件
System.IO.File.WriteAllText("大地.txt","嘿嘿嘿");
System.IO.File.WriteAllLines("又有.txt",new List<string>(){"233","666"});
//创建一个字节新文件
string conten = "222222doiddijo";
byte[] data = Encoding.UTF8.GetBytes(conten);
System.IO.File.WriteAllBytes("233.txt",data);
}
FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。这是这两种类的一个重要区别,如果你是准备读取byte数据的话,用StreamReader读取然后用 System.Text.Encoding.Default.GetBytes转化的话,如下,则可能出现数据丢失的情况,如byte数据的个数不对等。因此操作byte数据时要用FileStream。 string textContent = fileStream.ReadToEnd();byte[] bytes = System.Text.Encoding.Default.GetBytes(textContent);
字符数据易于使用, 但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行.
其中创建FileStream对象最简单的构造函数如下:
FileStream file = new FileStream(fileName,FileMode.Member);//默认方式,可读可写
FileStream file = new FileStream(fileName, FileMode.Member, FileAccess.Member);
04:通过FileStream流读写文件
在 C# 语言中文件读写流使用 FileStream 类来表示,FileStream 类主要用于文件的读写,不仅能读写普通的文本文件,还可以读取图像文件、声音文件等不同格式的文件。
FileStream流是处理byte[],默认UTF8类型
当你使用wirte方法时将非byte类型的输入内容,先将内容通过转换为字节
在创建 FileStream 类的实例时还会涉及多个枚举类型的值, 包括 FileAccess、FileMode、FileShare、FileOptions 等。
FileAccess 枚举类型主要用于设置文件的访问方式,具体的枚举值如下。
Read:以只读方式打开文件。
Write:以写方式打开文件。
ReadWrite:以读写方式打开文件。
FileMode 枚举类型主要用于设置文件打开或创建的方式,具体的枚举值如下。
CreateNew:创建新文件,如果文件已经存在,则会抛出异常。
Create:创建文件,如果文件不存在,则删除原来的文件,重新创建文件。
Open:打开已经存在的文件,如果文件不存在,则会抛出异常。
OpenOrCreate:打开已经存在的文件,如果文件不存在,则创建文件。
Truncate:打开已经存在的文件,并清除文件中的内容,保留文件的创建日期。如果文件不存在,则会抛出异常。
Append:打开文件,用于向文件中追加内容,如果文件不存在,则创建一个新文件。
FileShare 枚举类型主要用于设置多个对象同时访问同一个文件时的访问控制,具体的枚举值如下。
None:谢绝共享当前的文件。
Read:允许随后打开文件读取信息。
ReadWrite:允许随后打开文件读写信息。
Write:允许随后打开文件写入信息。
Delete:允许随后删除文件。
Inheritable:使文件句柄可由子进程继承。
FileOptions 枚举类型用于设置文件的高级选项,包括文件是否加密、访问后是否删除等,具体的枚举值如下。
WriteThrough:指示系统应通过任何中间缓存、直接写入磁盘。
None:指示在生成 System.IO.FileStream 对象时不应使用其他选项。
Encrypted:指示文件是加密的,只能通过用于加密的同一用户账户来解密。
DeleteOnClose:指示当不再使用某个文件时自动删除该文件。
SequentialScan:指示按从头到尾的顺序访问文件。
RandomAccess:指示随机访问文件。
Asynchronous:指示文件可用于异步读取和写入。
构造方法 说明
FileStream(string path, FileMode mode) 使用指定路径的文件、文件模式创建 FileStream 类的实例
FileStream(string path, FileMode mode, FileAccess access) 使用指定路径的文件、文件打开模式、文件访问模式创建 FileStream 类的实例
FileStream(string path, FileMode mode, FileAccess access, FileShare share) 使用指定的路径、创建模式、读写权限和共享权限创建 FileStream 类的一个新实例
FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options) 使用指定的路径、创建模式、读写权限和共享权限、其他 文件选项创建 FileStream 类的实例
//写的功能
public static void FileStreams()
{
//定义文件路径
string path = "Player.txt";
if (System.IO.File.Exists("Player.txt"))
{
//创建 FileStream 类的实例
using (FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate,FileAccess.ReadWrite))
{
//定义学号
string msg = "6666666666666666666666666666";
//将字符串转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(msg);
//向文件中写入字节数组
fileStream.Write(bytes, 0, bytes.Length);
//刷新缓冲区
fileStream.Flush();
}
}
}
//读的功能
public static void FileRead()
{
//定义文件路径
string path = "Player.txt";
if (System.IO.File.Exists("Player.txt"))
{
using (FileStream fileStream=new FileStream(path,FileMode.Open,FileAccess.ReadWrite))
{
//定义存放文件信息的字节数组
byte[] bytes = new byte[fileStream.Length];
//读取文件信息
int length=fileStream.Read(bytes, 0, bytes.Length);
string c = System.Text.Encoding.UTF8.GetString(bytes, 0,length);
Console.WriteLine("学生的学号为:");
//输出学生的学号
Console.WriteLine(c);
}
}
}
05:通过 StreamReader读 StreamWriter写文件
//读取
if (System.IO.File.Exists("TextFile1.txt"))
{
using (StreamReader reader = new StreamReader("TextFile1.txt", Encoding.UTF8))
{
while (true)
{
string str = reader.ReadLine(); //读取一行
Console.WriteLine(str);
if (str == null)
{
break;
}
}
Console.WriteLine(reader.ReadToEnd()); //读取到文本末尾
}
}
//写入
using (StreamWriter writer=new StreamWriter("哈哈哈.txt"))
{
writer.WriteLine(new char[]{'2','3'});
}
Console.ReadKey();