using System;
using System.IO;
using System.Text;
/**
- 韩振飞
- 在c#程序中,当操作变量与常量时,这些变量与常量的值是存放在内存中的,程序运行结束后,使用的数据会被清除
- 。如果想长久保存程序中的数据,可以选择使用文本或数据库来存储。
- 文件通常存放在本地磁盘的指定位置。可以是文本、文档、图片等形式。
- 流:在C#中将这种通过不同输入/输出设备(键盘、内存、显示器、网络等)之间的数据传输抽象表述为“流”
- 文件流:在计算机中,无论是文本、图片、音频还是视频,所有的文件都是二进制形式存储的。
- c#专门针对文件的输入输出操作提供了一系列流,统称文件流:输入文件流 输出文件流
- File类 FileStream类和 FileInfo类 操作文件的类
- Directory和DirectoryInfo类属于操作目录的类
- StreamReader类和StreamWriter类属于操作文本文件的类。
- path类属于操作文件路径的类
- C#字符编码解码 Encoder 和Decoder
- Encoder可以将一组字符编码为一个字节序列
- Decoder可以将已编码的字节序列解码为字符序列
- 若要获取实例Encoder类,应用程序应使用Encoding下的 GetEncoder方法
- GetByteCount方法确定多少个字节进行编码的一组Unicode字符
- Decoder类似
*/
namespace FIle
{
class Program
{
static int len;
static void Main(string[] args)
{
FileStreamWFunc();
Console.ReadKey();
}
/// <summary>
/// File是一个静态类
/// </summary>
static void FlieFunc()
{ //创建文件
File.Create(@"C:\Users\Administrator.BF-20201027ALCL\Desktop\12\Data.txt");
}
/// <summary>
/// FileStream类表示在磁盘或网络路径上指向的文件的流。在文件中读写字节和字节数组的方法
/// FileStream对象可以读取图像、声音、视频、文本等
/// </summary>
static void FileStreamFunc()
{
byte[] byteData = new byte[1024];
char[] charData = new char[1024];
using (FileStream aFile = new FileStream(@"C:\Users\Administrator.BF-20201027ALCL\Desktop\12\Data.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite))
{
//aFile.Seek(3,SeekOrigin.Begin);
//从流中读取字节块到byteData数组中
len = aFile.Read(byteData,0,charData.Length);
}
//将字节数组和内部缓冲区中的字节解码为字符数组
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byteData, 0, byteData.Length, charData, 0);
Console.WriteLine(charData);
//============另外
//字节数组看不懂,要进行解码
//string str = Encoding.UTF8.GetString(byteData,0,len);
// Console.WriteLine(str);
}
static void FileStreamWFunc()
{
string path = @"C:\Users\Administrator.BF-20201027ALCL\Desktop\12\1.txt";
byte[] byteData;
char[] charData;
using (FileStream Afile = new FileStream(path,FileMode.Create))
{
//charData = "Hello World Three People Walking".ToCharArray();
charData = "三人行".ToCharArray();
// Decoder e1 = Encoding.UTF8.GetDecoder();
Encoder e = Encoding.UTF8.GetEncoder();
//计算字符序列化需要的字节数组长度;
byteData = new byte[e.GetByteCount(charData,0,charData.Length,true)];
e.GetBytes(charData,0,charData.Length,byteData,0,true);
//encoder.GetBytes(chars, 0, chars.Length, bytes, 0, true);
// Afile.Seek(0,SeekOrigin.Begin);
Afile.Write(byteData,0,byteData.Length);
}
//using (FileStream afile = new FileStream(path,FileMode.OpenOrCreate,FileAccess.ReadWrite))
//{
// charData = "三人行科技有限公司".ToCharArray();
// byteData = new byte[charData.Length];
// Encoding en = Encoding.UTF8;
// en.GetBytes(charData,charData.Length, byteData,byteData.Length);
// afile.Write(byteData,0,byteData.Length);
//}
}
}
}