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. iconfont作用在css伪类中的写法

    iconfont作用在css伪类中需要注意两点: 1.字体声明(font-family: "iconfont";). 2.把字体写成十六进制的Unicode编码.比如:" ...

  2. linux存储管理之磁盘配额

    磁盘配额 1  相关命令:quota.quotacheck.edquota.quotaon.quotaoffquota要使用的命令有两种:一种用于查询功能,包括quota.quotacheck.quo ...

  3. Symbol Vs String

    最重要区别 1 symbol存入内存后,始终存在,如果不进行垃圾收集,可能导致内存泄漏. String只会存在于某个创建它的作用域内.即有生命周期的. 2.唯一性. \\进入控制台 >" ...

  4. android Studio 出现:Unable to resolve dependency for ':app@debug/compileClasspath'

    li经千辛万苦,我的新工程gradle搞定了 但是却在变异的时候告诉我 Unable to resolve dependency for ':app@debug/compileClasspath'xx ...

  5. SWUST OJ(961)

    进制转换问题 #include<stdio.h> #include<stdlib.h> #define STACK_SIZE 100 #define STCK_INCREMEN ...

  6. LeetCode(3):无重复字符的最长子串

    Medium! 题目描述: 给定一个字符串,找出不含有重复字符的 最长子串 的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ...

  7. python scrapy同时执行spiders多个爬虫

    假设spiders文件夹下多个文件: name.py     name = 'name' name1.py    name = 'name1' name2.py    name = 'name2' . ...

  8. 和系统运行状况相关的Shell命令总结

    1.  Linux的实时监测命令(watch):    watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动运行.该命令最为常用的两个选项是-d和-n,其中-n表 ...

  9. ES5和ES6那些你必须知道的事儿(一)

    ES5和ES6那些你必须知道的事儿 ES5新增的东西 一.数组方法 1.forEach     用途:遍历,循环 对于空数组不会执行回调函数 //用法 array.forEach( function( ...

  10. 【转载】如何将本地文件上传到github托管

    转自:http://www.cnblogs.com/babywin/p/6073124.html 清楚明白.