c#_IO(部分)
using System;
using System.Globalization;
using System.IO;
using System.Text;
namespace c_IO
{
class Program
{
static string path = @"E:\IO\file_Create.txt";
static void Main(string[] args)
{
MemoryStreams();
Console.ReadKey();
}
/// <summary>
/// 二进制的读写操作
/// </summary>
public static void BinaryWriter()
{
Stream stream = new FileStream(@"C:\Users\topo\Desktop\12312.txt", FileMode.Open);
Stream stream1 = new FileStream(@"C:\Users\topo\Desktop\12311.txt", FileMode.OpenOrCreate);
BinaryReader binaryReader = new BinaryReader(stream);
BinaryWriter binaryReade1r = new BinaryWriter(stream1);
binaryReade1r.Write(Encoding.UTF8.GetBytes("666")); // 整型
binaryReade1r.Write(Encoding.UTF8.GetBytes("tryrt")); // 整型
binaryReade1r.Write(Encoding.UTF8.GetBytes("-=-=-=")); // 整型
binaryReade1r.Write(Encoding.UTF8.GetBytes("/*/+/;'\\;'")); // 整型
binaryReade1r.Write(Encoding.UTF8.GetBytes("六六六"));
stream1.Close();
binaryReade1r.Close();
string str = null;
int i = 0;
try
{
while (true)
{
str += Convert.ToString(binaryReader.ReadChar());
i++;
}
}
catch (Exception)
{
Console.WriteLine(str.Length);
Console.WriteLine(i);
}
Console.ReadKey();
}
/// <summary>
/// 缓冲流
/// </summary>
public static void BufferedStream()
{
FileStream fs = new FileStream(@"C:\Users\topo\Desktop\12312123123.txt", FileMode.OpenOrCreate);
BufferedStream bs = new BufferedStream(fs);
byte[] receiveBufferBytes = new byte[4096];
//byte[] byte1 = Encoding.UTF8.GetBytes("你在他乡还好吗?");
//bs.Write(byte1, 0, byte1.Length);
//bs.Flush();
byte[] bytes = new byte[bs.Length];
bs.Read(bytes, 0, (int)bs.Length);
Console.WriteLine(Encoding.UTF8.GetString(bytes));
Console.ReadKey();
}
/// <summary>
/// 作计算机的目录结构
/// </summary>
public static void Directoryinfo()
{
//删除目录
//Directory.Delete("");
//删除此目录 true表示有子目录也删除 否则异常
//Directory.Delete("", false);
//此目录是否存在 返回bool值
// Directory.Exists("");
//根据路径返回此目录下的子目录
//string[] dirs1 = Directory.GetDirectories(@"C:\Users\topo\Desktop");
//for (int i = 0; i < dirs1.Length; i++)
//{
// Console.WriteLine(dirs1[i]);
//}
//第二个参数表示:搜索的范围,就是搜索的文件夹包含“基础”关键字
// string[] dirs2 = Directory.GetDirectories("路径", "要搜索的名字");
// Console.WriteLine(dirs2.Length);
////搜索目录下的所有文件
//string[] files = Directory.GetFiles(@"C:\Users\topo\Desktop");
//for (int i = 0; i < files.Length; i++)
//{
// Console.WriteLine(files[i]);
//}
//第三个参数表示:指定搜索操作应包括所有子目录还是仅包括当前目录。
//string[] files1 = Directory.GetFiles(@"C:\Users\topo\Desktop", "2.txt", SearchOption.TopDirectoryOnly);
//Console.WriteLine(files1.Length);
///移动、剪切。只能在同一个磁盘中。目录没有Copy方法。可以使用Move()方法实现重命名。
///剪切 第一个是要移动的文件夹,第二个是目标文件夹加上移动后文件夹的名称
//Directory.Move(@"C:\Users\topo\Desktop\新建文件夹 (2)", @"C:\Users\topo\Desktop\新建文件夹 (3)\tp");
//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
//---------------------------------------------------------------
string load = @"C:\Users\topo\Desktop";
DirectoryInfo info = new DirectoryInfo(load);
//获取文件夹创建时间
DateTime time = info.CreationTime;
Console.WriteLine(time);
//获取文件夹后缀名
string str = info.Extension;
Console.WriteLine(str);
//FullName:获取全路径
str = info.FullName;
Console.WriteLine(str);
//Parent:获取指定文件夹的父文件
DirectoryInfo info2 = info.Parent;
Console.WriteLine(info2.Name);
//Root:获取指定文件夹的根目录
DirectoryInfo info3 = info.Root;
Console.WriteLine(info3);
//CreateSubdirectory:创建一个新的文件夹
info.Parent.CreateSubdirectory("我刚新建的");
//GetDirectories:获取指定目录中子目录的名称
string[] strlist = Directory.GetDirectories(@"C:\Users\topo\Desktop");
for (int i = 0; i < strlist.Length; i++)
{
Console.WriteLine(strlist[i]);
}
//GetCurrentDirectory:获取应用程序的当前文件目录
string str2 = Directory.GetCurrentDirectory();
Console.WriteLine(str2);
//GetDirectoryRoot:获取指定目录中所有子目录的根目录
str2 = Directory.GetDirectoryRoot(@"C:\Users\topo\Desktop");
Console.WriteLine(str2);
Console.ReadLine();
}
/// <summary>
/// 提供计算机驱动器的详细信息
/// </summary>
public static void NiceDriveInfo()
{
DriveInfo[] a = DriveInfo.GetDrives();
foreach (DriveInfo item in a)
{
Console.WriteLine("驱动器:{0}", item.Name);
Console.WriteLine("类型:{0}", item.DriveType);
if (item.IsReady)
{
Console.WriteLine("卷标:{0}", item.VolumeLabel);
Console.WriteLine("文件系统:{0}", item.DriveFormat);
Console.WriteLine("当前可用空间:{0}", item.AvailableFreeSpace);
Console.WriteLine("可用空间:{0}", item.TotalFreeSpace);
Console.WriteLine("磁盘总大小:{0}", item.TotalSize);
}
}
Console.ReadKey();
}
/// <summary>
/// 大部分的File静态方法
/// </summary>
public static void FILEINFO()
{
//往第一个参数路径里面写第二个参数的内容 如果文件不存在则新建 存在则追加写入
//File.AppendAllText(@"C:\Users\topo\Desktop\appendalltextTest.txt","appendallTest测试");
// //创建一个StreamWriter流 将UTF-8编码的文本追加到当前文件
//StreamWriter streamWriter= File.AppendText(@"C:\Users\topo\Desktop\appendalltextTest.txt");
// streamWriter.WriteLine("123123");
// streamWriter.WriteLine("123123");
// streamWriter.WriteLine("123123");
// streamWriter.Flush();
// streamWriter.Close();
// 已重载。 将现有文件复制到新文件。 有1个重载,第三个参数为布尔值,指示是否可以改写原有文件。如果不允许改写,而文件又存在会报错 ,如果允许,会覆盖掉原内容。
//File.Copy(@"C:\Users\topo\Desktop\page0.txt", @"C:\Users\topo\Desktop\page123.txt", true);
// 已重载。 在指定路径中创建文件
//File.Create(@"E:\IO\file_Create.txt");
//新建文件并写入UTF-8编码的字符 streamwriter
//StreamWriter sw= File.CreateText(@"E:\IO\file_Create.txt");
//sw.WriteLine("createText测试");
//sw.Flush();
//sw.Close();
//第一个是加密 第二个是解密 根据当前账户来加密解密
// File.Encrypt(@"E:\IO\file_Create.txt");
// File.Decrypt(@"E:\IO\file_Create.txt");
//删除指定文件
// File.Delete(@"E:\IO\file_Create.txt");
//确定文件是否存在
//Console.WriteLine(File.Exists(@"E:\IO\file_Create.txt"));
//确定文件属性
//FileAttributes fileAttributes= File.GetAttributes(@"E:\IO\file_Create.txt");
//Console.WriteLine(fileAttributes.ToString());
//对应有get方法
////返回指定文件或目录的创建日期和时间。
//DateTime s = File.GetCreationTime(@"E:\IO\file_Create.txt");
////返回指定的文件或目录的创建日期及时间,其格式为协调通用时间(UTC)。
//DateTime s1 = File.GetCreationTimeUtc(@"E:\IO\file_Create.txt");
////返回上次访问指定文件或目录的日期和时间。
//DateTime s2 = File.GetLastAccessTime(@"E:\IO\file_Create.txt");
////返回上次访问指定的文件或目录的日期及时间,其格式为协调通用时间(UTC)。
//DateTime s3 = File.GetLastAccessTimeUtc(@"E:\IO\file_Create.txt");
////返回上次写入指定文件或目录的日期和时间。
//DateTime s4 = File.GetLastWriteTime(@"E:\IO\file_Create.txt");
////返回上次写入指定的文件或目录的日期和时间,其格式为协调通用时间(UTC)。
//DateTime s5 = File.GetLastWriteTimeUtc(@"E:\IO\file_Create.txt");
//Console.WriteLine(s.ToString());
//Console.WriteLine(s1.ToString());
//Console.WriteLine(s2.ToString());
//Console.WriteLine(s3.ToString());
//Console.WriteLine(s4.ToString());
//Console.WriteLine(s5.ToString());
//打开指定路径的filestream
//FileStream fs= File.Open(@"E:\IO\file_Create.txt",FileMode.Open);
////打开指定路径文件进行读取
//FileStream fs= File.OpenRead(@"E:\IO\file_Create.txt");
//byte[] bt = new byte[1024*1024];
//fs.Read(bt, 0, bt.Length);
//Console.WriteLine(Encoding.Default.GetString(bt)); ; ;
//打开指定文件以streamreader方式读取
//StreamReader sr= File.OpenText(@"E:\IO\file_Create.txt");
// string str=sr.ReadToEnd();
// Console.WriteLine(str);
//打开现有文件以进行写入。 不是追加 是覆盖
//FileStream fs = File.OpenWrite(@"E:\IO\file_Create.txt");
//fs.Write(Encoding.UTF8.GetBytes("1111测试测试"));
//fs.Close();
//打开一个文件,将文件的内容读入一个字符串,然后关闭该文件。 此方法不分图片,文本还是视频。
//string s= Encoding.UTF8.GetString( File.ReadAllBytes(@"E:\IO\file_Create.txt"));
// Console.WriteLine(s);
//打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件。对于中文编码,应该设置编码为UTF - 8或GB2312。否则返 回的都是乱码。
////好像一行算一个字符串
// string [] s=File.ReadAllLines(path);
// for (int i = 0; i < s.Length; i++)
// {
// Console.WriteLine(s[i]);
// }
// Console.WriteLine(s.Length);
//将此路径全读进一个字符串 然后关闭该文件
//string s=File.ReadAllText(path);
//Console.WriteLine(s);
//用一个文件替换另一个文件 并且备份被替换掉的文件
//File.Replace(@"C:\Users\topo\Desktop\新建文本文档 (2).txt", @"C:\Users\topo\Desktop\新建文本文档.txt", @"C:\Users\topo\Desktop\file_Create.txt");
//设置文件属性
// File.SetAttributes(path, FileAttributes.ReadOnly);
// 创建一个新文件,在其中写入指定的字节数组,然后关闭该文件
//。如果目标文件已存在,则改写该文件
//。此方法能够写任何类型的文件,不分文本图片视频。
//覆盖写入
//File.WriteAllBytes(path, Encoding.UTF8.GetBytes("星星")); ;
//把一个字符数组写入新文件 如果文件存在则覆盖写入 字符串数组每一项是一行
//File.WriteAllLines(path,new string[] { "阿森纳很多卡","拉技术大会" },Encoding.UTF8);
//创建一个新文件并写入指定字符串,如果存在则覆盖写入
File.WriteAllText(path,"d奥古斯u大概是高大上各大公司的",Encoding.UTF8);
Console.ReadKey();
}
/// <summary>
/// 监视文件
/// </summary>
public static void FileSystemWatchers()
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = @"E:\IO";
fileSystemWatcher.NotifyFilter = NotifyFilters.Attributes|NotifyFilters.Size;
////发生更改时,更改事件就会发生
//.Changed
////由FileSystemWatcher所指定的路径中文件或目录被创建时,创建事件就会发生
//.Created
////当由FileSystemWatcher所指定的路径中文件或目录被删除时,删除事件就会发生
//.Deleted
////当由FileSystemWatcher所指定的路径中文件或目录被重命名时,重命名事件就会发生
//.Renamed
fileSystemWatcher.Changed +=new FileSystemEventHandler(sizen);
fileSystemWatcher.IncludeSubdirectories = true;
fileSystemWatcher.EnableRaisingEvents = true;
}
/// <summary>
/// 监视文件2
/// </summary>
public static void sizen(object sender, FileSystemEventArgs e)
{
Console.WriteLine("file:" + e.FullPath + "" + e.ChangeType);
}
/// <summary>
/// 监视文件1
/// </summary>
public static void Attributesn(object sender, FileSystemEventArgs e)
{
Console.WriteLine("文件属性被改变了");
}
/// <summary>
/// 这个类型实现对内存(而不是物理文件)中存储的流教据的随机访问
/// </summary>
public static void MemoryStreams()
{
//https://www.cnblogs.com/kissdodog/archive/2013/01/20/2868864.html
MemoryStream memoryStream = new MemoryStream();
Console.WriteLine(memoryStream.CanRead); //True 内存流可读
Console.WriteLine(memoryStream.CanSeek); //True 内存流支持查找,指针移来移去的查找
Console.WriteLine(memoryStream.CanTimeout); //False 内存流不支持超时
Console.WriteLine(memoryStream.CanWrite); //True 内存流可写
Console.WriteLine(memoryStream.Capacity); //0 分配给该流的字节数
}
}
}