System.IO命名空间中常用的非抽象类

BinaryReader 从二进制流中读取原始数据
BinaryWriter 从二进制格式中写入原始数据
BufferedStream 字节流的临时存储
Directory 有助于操作目录结构
DirectoryInfo 用于对目录执行操作
DriveInfo 提供驱动信息
File 有助于文件处理
FileInfo 用于对文件执行操作
FileStream 用于文件中任何位置的读写
MemoryStream 用于随机访问存储在内存中的数据流
Path 对路径信息执行操作
StreamReader 从字节流中读取数据
StreamWriter 用于向一个流中写入字符
StringWriter 用于读取字符串缓冲区
StringReader 用于写入字符串缓冲区

FileStream类:

FileStream f = new FileStream("ont.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
FileMode表示打开的方式
  • append:打开一个已存在的文件,并将指针放在文件末尾。如果文件不存在那么创建一个新的文件。
  • create:创建一个新的文件。如果旧文件存在,那么删除旧文件创建新文件。
  • createnew:指定操作系统创建一个新的文件。如果文件已经存在,那么抛出异常。
  • open:打开一个文件。如果文件不存在抛出异常。
  • openorcreate:指定操作系统打开一个文件,如果文件不存在那么创建一个新文件。
  • Truncate:清空文件内容并打开文件,写入内容。如果文件不存在那么抛出异常。
FileAccess表示用来读/写和读/写权限 操作的模式有:read、Write、readwrite
FileShare类似文件锁的东西
  • Inheritable:使文件句柄可由子进程继承,win32不支持该功能。
  • None:谢绝(当前进程或者另一进程)共享当前文件。
  • read:允许随后打开文件读取。如果未定义此标签,在关闭该文件前,后续打开该文件进行读取的请求都将会失败。即使写了该标签,也需要相应的权限才能够访问改文件。
  • readwrite:允许随后打开或写入文件。如果未定义该标签,在关闭该文件前,后续打开该文件进行读取或者写入都将会失败。即使写了该标签,也需要相应的权限才能够访问该文件。
  • Write:允许随后写入文件。如果未定义该标签,在关闭该文件前,后续打开该文件进行写入都将会失败。即使写了该标签,也需要相应的权限才能够访问该文件。
  • delete:允许随后删除文件。

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
/*
* ================ Path ===============
string file = @"D:\a\b\c\one.txt";
Console.WriteLine(Path.GetDirectoryName(file)); // 获取文件的路径
Console.WriteLine(Path.GetExtension(file)); // 获取文件扩展名
Console.WriteLine(Path.GetFileName(file)); // 获取文件名(包含扩展)
Console.WriteLine(Path.GetFullPath("123.txt")); // 可以根据相对路径获取全路径
Console.WriteLine(Path.GetRandomFileName()); // 随即返回一个文件名(不重复的文件名)
Console.WriteLine(Path.GetTempPath()); // 返回一个临时目录
Console.ReadKey();
*/
/*
* ========================= File ===============================
string logName = "delete.txt"; // 文件名
string filePath = Path.GetFullPath(logName); // 获取全路径
if (!File.Exists(filePath))
{
// 如果文件不存在
File.Create(filePath).Close(); // 创建文件并且关闭
}
// 读取还可以使用 File.ReadAllLines(filePath)按行读取
string logtext = File.ReadAllText(filePath); // 读取文件
Console.WriteLine(logtext);
logtext += "\r\n" + DateTime.Now.Date;
Console.WriteLine(filePath);
File.WriteAllText(filePath, logtext); // 将内容写进文本
Console.ReadKey();
*/
/*
* ======================= FileInfo ==============================
string fileName = "delete.txt";
string filePath = Path.GetFullPath(fileName);
FileInfo fi = new FileInfo(fileName); // 创建管理文件的软连接
if (!fi.Exists)
{
Console.WriteLine("文件不存在!!!");
}
var writeThing = fi.AppendText(); // 追加方式
writeThing.WriteLine(DateTime.Now.ToString()); // 追加文本
writeThing.Close(); // 关闭
var readThing = fi.OpenText(); // 读取
Console.WriteLine(readThing.ReadToEnd());
readThing.Close(); // 关闭
Console.ReadKey();
*/
/*
* ================================== Directory ===========================================
string filePath = @"F:\下载\C#完整版.NET教程(价值398元)\04NetFramework\【IT教程网】04NetFramework\Day02";
string fileP = filePath + @"\abc";
if (!Directory.Exists(fileP))
{
// 判断文件是否存在,如果文件不存在那么创建文件目录
Directory.CreateDirectory(fileP);
}
foreach(var item in Directory.GetFiles(filePath)){
Console.WriteLine(item); // 输出该文件下的子文件名称
}
Console.WriteLine("\r\n");
foreach(var item in Directory.GetDirectories(filePath))
{
Console.WriteLine(item); // 输出该目录下的子目录
}
Console.WriteLine(Directory.GetParent(filePath)); // 返回父类目录
Console.ReadKey();
*/
/*
* ======================== DirectoryInfo ================================
string filePath = @"F:\下载\C#完整版.NET教程(价值398元)\04NetFramework\【IT教程网】04NetFramework\Day02";
DirectoryInfo dir = new DirectoryInfo(filePath);
dir.CreateSubdirectory(@"ab\cd\ef\gh\kj"); // 可连续创建
foreach (var item in dir.GetDirectories())
{
Console.WriteLine(item); // 输出当前文件夹子目录
}
Console.WriteLine("\n");
foreach(var item in dir.GetDirectories())
{
Console.WriteLine(item); // 输出当前文件夹子目录
}
Console.ReadKey();
*/
/*
* ================================== DriveInfo =================================
// 对磁盘进行操作
foreach(DriveInfo item in DriveInfo.GetDrives())
{
Console.WriteLine(item); // 获取所有驱动的名称(显示磁盘的数量)
Console.WriteLine(item.DriveType); // 获取类型
if (item.IsReady)
{
// 判断磁盘是否准备就绪
Console.WriteLine(item.DriveFormat); // 获取存储格式
Console.WriteLine(item.TotalSize); // 获取磁盘大小,默认是比特单位
Console.WriteLine((item.TotalSize * 1.0) / (1024.0*1024.0*1024.0)); // 单位转换,KB/M/G
Console.WriteLine((item.TotalFreeSpace * 1.0) / (1024.0 * 1024.0 * 1024.0)); // 剩余可用路径,这里转换为G
}
Console.WriteLine();
}
Console.ReadKey();
*/
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// 文件系统的监控 FileSystemWatcher
FileSystemWatcher watcher = new FileSystemWatcher(@"F:\下载\C#完整版.NET教程(价值398元)\04NetFramework\【IT教程网】04NetFramework\Day02"); // 监听该目录
watcher.NotifyFilter = (NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName); // 设置过滤器,LastAccess上一次打开的日期,LastWrite最后一次修改,FileName/DirectoryName文件名或者目录名的修改
// 事件的注册
watcher.Changed += new FileSystemEventHandler(OnChanged); // 监听改变事件,函数OnChanged里面的事件
watcher.Created += new FileSystemEventHandler(OnChanged); // 监听创建事件,函数OnChanged里面的事件
watcher.Deleted += new FileSystemEventHandler(OnChanged); // 监听删除事件,函数OnChanged里面的事件
watcher.Renamed += new RenamedEventHandler(OnRenamed); // 监听重命名事件,函数OnChanged里面的事件
watcher.Error += new ErrorEventHandler(OnError); // 监听错误事件,函数OnError里面的事件
watcher.EnableRaisingEvents = true; // 启用组件
Console.WriteLine("Press 'Enter' to exit...");
Console.ReadKey();
}
// OnChanged事件
private static void OnChanged(object source, FileSystemEventArgs e)
{
WatcherChangeTypes changeType = e.ChangeType; // 获取发生的类型
// e.FullPath获取文件路径及其文件名
Console.WriteLine("The File {0}=>{1}", e.FullPath, changeType.ToString());
}
// OnRenamed事件
private static void OnRenamed(object source, RenamedEventArgs e)
{
WatcherChangeTypes changeType = e.ChangeType;
// e.OldFullPath 获取改变前文件路径及其文件名
Console.WriteLine("The File {0} {2} to {1}", e.OldFullPath, e.FullPath, changeType.ToString());
}
private static void OnError(object source, ErrorEventArgs e)
{
Console.WriteLine("An error has occurred.");
}
}
}

对文件的读写操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// 不常用(实际不会这样子用)
/*
// 使用FileStream类来管理文件数据
string overview = "Most commercial application, such as..."; // 定义写入的字符串
FileInfo fileStore = new FileInfo("123.txt"); // 打开对应的文件,默认当前路径
FileStream conduit = fileStore.Create(); // 创建
byte[] encodedOverview = new UTF8Encoding(true).GetBytes(overview); // encodedOverview数组格式的,将其进行编码
conduit.Write(encodedOverview, 0, encodedOverview.Length); // 将编码后的内容(第一个参数固定式byte数组)写进去,需要传递从那个位置开始,多长
conduit.Close(); // 关闭
*/
//
/*
// 使用MemoryStream类来管理内存数据
byte[] overview = new UTF8Encoding(true).GetBytes("Most commercial application, such as..."); // 同样编码字符串
MemoryStream conduit = new MemoryStream(overview.Length); // 开辟内存空间
conduit.Write(overview, 0, overview.Length); // 进行写入,起始位置,长度
Console.WriteLine(conduit.Position.ToString()); // 获取写入指针的当前位置
conduit.Flush(); // 缓存的数据写进内存空间
conduit.Seek(0, SeekOrigin.Begin); // 将文件指正写入到首部
// 读取
byte[] overviewRead = new byte[conduit.Length]; // 创建内存流
conduit.Read(overviewRead, 0, ((int)conduit.Length)); // 读取,从0开始读取,读取长度为((int)conduit.Length)
Console.WriteLine(new UTF8Encoding().GetChars(overviewRead));
conduit.Close();
*/
//
/*
// 使用BufferedStream来提高流性能
string overview = "Most commercial application, such as..."; // 字符串
FileInfo fileStore = new FileInfo("123.txt"); // 打开文件
FileStream conduit = fileStore.Create(); // 创建
BufferedStream fileBuffer = new BufferedStream(conduit); // 创建缓冲区
byte[] encodedOverview = new UTF8Encoding(true).GetBytes(overview); // 编码内容
fileBuffer.Write(encodedOverview, 0, encodedOverview.Length); // 写进缓冲区
fileBuffer.Close(); // 关闭缓冲区
conduit.Close(); // 关闭文件流
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 常用(简便)
//
// 两大分类: 二进制文件、文本文件
// 二进制文件区分BinaryReader/BinaryWriter
// 文本文件又分为:文件、字符串。区分:StringReader/StringWriter
//
// 下面的文本文件读取
/*
// 不使用数据库和文件的情况下存储字符串
StringBuilder sb = new StringBuilder();
TextWriter tw = new StringWriter(sb);
// 写内容(支持多种重载)
tw.Write("您好,");
tw.Write(123);
tw.Write("\tData:{0}\t", DateTime.Now);
tw.WriteLine("bye!");
// 读取操作
TextReader tr = new StringReader(sb.ToString()); // 注意传递进去的是字符串
Console.WriteLine(tr.ReadToEnd()); // 读取
Console.ReadKey();
*/
//
/*
// 对文件进行操作
TextWriter tw = new StreamWriter("123.txt"); // 读取当前路径下的文件
// 写入同上
tw.Write("您好,");
tw.Write(123);
tw.Write("\tData:{0}\t", DateTime.Now);
tw.WriteLine("bye!");
tw.Close(); // 关闭
// 读取
TextReader tr = new StreamReader("123.txt");
Console.WriteLine(tr.ReadToEnd());
// 下面是二进制的
Stream sm = new FileStream("456.dat", FileMode.OpenOrCreate); // 如果文件存在就打开文件,如果文件不存在那么创建并打开文件
BinaryWriter bw = new BinaryWriter(sm);
bw.Write(true);
bw.Write(123);
bw.Write("hello");
bw.Close();
sm.Close();
// 读取
BinaryReader sr = new BinaryReader(new FileStream("456.dat", FileMode.Open));
bool b = sr.ReadBoolean(); // 读取bool
int i = sr.ReadInt32(); // 读取整型
string s = sr.ReadString(); // 读取字符串
Console.WriteLine("bool值:{0},整型:{1},字符型:{2}", b, i, s);
Console.ReadKey();
sr.Close();
// 注:值得注意的是二进制的读写一定要保持他们的顺序,不然会报错
*/
}
}
}

2019-8-3

/*
* 用户: NAMEJR
* 日期: 2019/8/3
* 时间: 19:52
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms; namespace 文件读取
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} // 文件读取
void Btn_ReadFileClick(object sender, EventArgs e)
{
// OpenFileDialog 打开文件对话框
OpenFileDialog ofd = new OpenFileDialog();
// ShowDialog:模态显示,显示时独占进程(不允许其它窗口显示),当窗口关闭,后续代码才会继续运行
// Show:非模态显示,可以和其它窗口互相切换,后续代码不会停留
if(ofd.ShowDialog()!= DialogResult.OK)
{
return;
}
//this.TB_Content.Text=File.ReadAllText(ofd.FileName,Encoding.Default);
FileStream fs = new FileStream(ofd.FileName,FileMode.Open,FileAccess.Read);
StreamReader sr = new StreamReader(fs,Encoding.Default);
/*
while(!sr.EndOfStream)
{
this.TB_Content.Text += sr.ReadLine(); // 单行读取
}*/
this.TB_Content.Text = sr.ReadToEnd(); // 全部输出
} // 文件保存
void Btn_SaveFileClick(object sender, EventArgs e)
{
// SaveFileDialog 保存文件对话框
SaveFileDialog sfd = new SaveFileDialog();
if(sfd.ShowDialog()!=DialogResult.OK)
{
return;
}
//File.WriteAllText(sfd.FileName,this.TB_Content.Text,Encoding.Default);
StreamWriter sw = new StreamWriter(sfd.FileName,true,Encoding.Default); // 第二个参数为true表示不覆盖(追加)
sw.Write(this.TB_Content.Text);
sw.Flush();
}
}
}

一句话写入:File.WriteAllText("D:/Code/Demo/Demo/upload/index.html", l_strXml);

AddBy 2019-10-24

using System;
using System.IO; namespace 控制台
{
class Program
{
static void Main(string[] args)
{
string l_strPath = @"D:\文件资源\1.xlsx"; // 使用ReadAllText可以进行一次性读取出文档内容,并且指定编码
//Console.WriteLine(File.ReadAllText(l_strPath, Encoding.GetEncoding("GB2312")));
//
// 使用ReadToEnd
FileStream l_fileStream = new FileStream(l_strPath, FileMode.Open);
StreamReader l_streamReader = new StreamReader(l_fileStream);
Console.WriteLine(l_streamReader.ReadToEnd()); // 也可以判断状态
Console.ReadKey();
}
}
}

EndAddBy 2019-10-24

C# System.IO和对文件的读写操作的更多相关文章

  1. 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待

     [等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可 ...

  2. android报错及解决2--Sdcard进行文件的读写操作报的异常

    报错描述: 对Sdcard进行文件的读写操作的时候,报java.io.FileNotFoundException: /sdcard/testsd.txt (Permission denied),在往S ...

  3. C# 运用StreamReader类和StreamWriter类实现文件的读写操作

    对文件的读写操作应该是最重要的文件操作,System.IO命名空间为我们提供了诸多文件读写操作类,在这里我要向大家介绍最常用也是最基本的StreamReader类和StreamWriter类.从这两个 ...

  4. 使用字符流(Writer、Reader)完成对文件的读写操作

    字符流 字符输出流:Writer,对文件的操作使用子类FileWriter 字符输入流:Reader,对文件的操作使用子类FileReader 每次操作的是一个字符 文件字符操作流会自带缓存,默认大小 ...

  5. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

    日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...

  6. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  7. INI 文件的读写操作

    在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...

  8. Android 对 properties文件的读写操作

    -. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...

  9. java文件的读写操作

    java文件的读写操作主要是对输入流和输出流的操作,由于流的分类很多,所以概念很容易模糊,基于此,对于流的读写操作做一个小结. 1.根据数据的流向来分: 输出流:是用来写数据的,是由程序(内存)--- ...

随机推荐

  1. MyEclipse项目的BUG修复错误类型

    一.The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .cla ...

  2. python __init__.py 的作用

    __init__.py的主要作用是: . Python中package的标识,不能删除 . 定义__all__用来模糊导入 . 编写Python代码(不建议在__init__中写python模块,可以 ...

  3. 代码统计工具-cloc

    官网地址:http://cloc.sourceforge.net/ https://sourceforge.NET/projects/cloc/files/ 下载得到cloc-1.64.exe Clo ...

  4. Hive入门学习

    Hive学习之路 (一)Hive初识 目录 Hive 简介 什么是Hive 为什么使用 Hive Hive 特点 Hive 和 RDBMS 的对比 Hive的架构 1.用户接口: shell/CLI, ...

  5. 如何使用require.js?

    最近几天在学习一个javascript库require.js,也看了一些相关的教学视频,这里推荐一下幕课网阿当老师的<阿当大话西游之Web组件>的教学视频,一整套看下来,参照视频里面的de ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)

    技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...

  7. python中字符串格式化

    username='小黑'age=18high=1.88s2='欢迎%s,年龄是%d,身高是%.2f'%(username,age,high)#%s是通用的,%d就必须传整数,%f就必须是小数,想保留 ...

  8. FS:[0] 链条

    0x01  用户态 在x86系统中,当线程在用户态执行时,段寄存器fs总是指向当前线程的TEB. 在Ntdll中有一个未公开的函数NtCurrentTeb() ,用来取得当前线程的TEB地址.FS:[ ...

  9. SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。

    语法 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表可 ...

  10. Alpha冲刺8

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10023260.html 作业博客:https://edu.cnblogs.com/campus ...