- 相对路径
./是当前目录
…/是父级目录
/是根目录 - 输入流和输出流
输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。 - 各种处理文件的类
在C#的System.IO 命名空间有各种不同的类,来进行各种文件操作。如下是其命名空间下一些常用的非抽象类:
I/O 类 描述
BinaryReader 从二进制流读取原始数据。
BinaryWriter 以二进制格式写入原始数据。
BufferedStream 字节流的临时存储。
Directory 有助于操作目录结构。
DirectoryInfo 用于对目录执行操作。
DriveInfo 提供驱动器的信息。
File 有助于处理文件。
FileInfo 用于对文件执行操作。
FileStream 用于文件中任何位置的读写。
MemoryStream 用于随机访问存储在内存中的数据流。
Path 对路径信息执行操作。
StreamReader 用于从字节流中读取字符。
StreamWriter 用于向一个流中写入字符。
StringReader 用于读取字符串缓冲区。
StringWriter 用于写入字符串缓冲区。
- FileStream类
FileStream 操作字节,可以操作任何类型的文件;
下面来简单介绍FileStream类的方法和参数:
(1)FileStream() 作用:
创建FileStream对象,参数:第一个是路径,第二个是文件模式FileMode枚举,第三个数据模式FileAcess
FileStream(String, FileMode):
FileStream(String, FileMode, FileAccess)
FileStream(String, FileMode, FileAccess, FileShare)
FileStream(String, FileMode, FileAccess, FileShare, Int32)
初始化FileStream时使用包含文件共享属性(System.IO.FileShare)的构造函数比使用自定义线程锁更为安全和高效
(2)FileMode(以何种方式打开或者创建文件):
CreateNew(创建新文件)、Create(创建并覆盖)、Open(打开)、OpenOrCreate(打开并创建)、Truncate(覆盖文件)、Append(追加);
(3)FileAcess(文件流对象如何访问该文件):
Read(只读) 、Write(写)、ReadWirte(读写);
(4)FileShare(进程如何共享文件):
None(拒绝共享)、Read 、Write、ReadWrite(同时读写)、Delete;
(5)bufferSize(缓冲区大小设置)
4、Stream.Read(Byte[], Int32, Int32)
当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。
5、Stream.Write(Byte[], Int32, Int32)
当在派生类中重写时,向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数。
6、close():关闭当前流并释放与当前流关联的任何资源(如套接字和文件句柄);
7、dispose():释放流所有使用的资源;
8、CopyTo(Stream):从当前流中读取所有字节并将其写入目标流。
CopyTo(Stream, Int32):从当前流中读取所有字节,并使用指定的缓冲区大小将它们写入目标流
9、Seek()(FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置):将此流的当前位置设置为给定值。(stream.seek(Int64,SeekOrigin)
第一个参数规定文件指针以字节为单位的移动距离。第二个参数规定开始计算的起始位置;SeekOrigin枚举包含3个值:Begin、Current 和 End;
例如:aFile.Seek(0, SeekOrigin.End);
10、由于设置了文件共享模式为允许随后写入,所以即使多个线程同时写入文件,也会等待之前的线程写入结束之后再执行,而不会出现错误
using (FileStream logFile = new FileStream(logFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write))
11、简单示例1:简单文件写入
FileStream devStream = new FileStream(devPath,
FileMode.Append, FileAccess.Write,
FileShare.ReadWrite,512);
devStream.Write(data, 0, 128);
if(devStream != null)
devStream.Close