流
文件流
FileStream
构造方法
public FileStream(string path, FileMode mode);
public FileStream(string path, FileMode mode, FileAccess access);
// path => 文件的路径
/* mode => {
Open,
OpenOrCreate
}
*/
/* access => {
Read,
Write,
ReadWrite
}
*/
fs.Seek(8, SeekOrigin.Begin); // 文件开始向后8个字节
fs.Seek(2, SeekOrigin.Current); // 文件当前位置向后2个字节
fs.Seek(-5, SeekOrigin.End); // 文件末尾向前五个字节
fs.Read(buf, 2, 10); // 向buf字节数组偏移2b处读取fs中10字节数据
fs.ReadByte(); // 读取一个字节
fs.Write(buf, 2, 10); // 向文件偏移2b处写入buf数据
fs.WriteByte() // 写一个字节
二进制读取流
BinaryReader
构造方法
public BinaryReader(Stream input);
public BinaryReader(Stream input, Encoding encoding);
示例
FileStream fs = new FileStream("xxx", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
一些方法
br.ReadString(); //
br.ReadDouble(); //
br.ReadInt32(); //
br.ReadChar(); //
// ... 类似
需要关闭
br.Close();
二进制写入流
与 BinaryReader
类似
方法的话只要 Write
FileStream fs = new FileStream("xxx", FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(xxx);
写入流
StreamWriter sw;
sw = new StreamWriter(p); // 文件路径
sw = new StreamWriter(fs); // 套接低级文件流
sw = new StreamWriter(p, append); // append = true 表示保留原有数据
sw.Write("hello"); // 写入hello
sw.WriteLine("hello world!") ; // 写入一行hello world
输出流
StreamReader sr;
sr = new StreamReader(p); // 文件路径
sr = new StreamReader(s); // 套接低级文件流
sr.Read(); // 读取返回下一个字符
sr.ReadLine(); // 读取一行
sr.ReadToEnd(); // 读到尾
格式化流
[Serializable]
public class User {
public string Name {get; set;}
[NonSerialized]
public string Note {get; set;}
}
var user = new User();
user.Name = "huro";
user.Note = "hello world!";
var input = new FileStream("user.txt", FileMode.OpenOrCreate, FileAccess.Write);
var bf = new BinaryFormatter();
bf.Serialize(input, user);
var output = new FileStream("user.txt", FileMode.OpenOrCreate, FileAccess.Read);
var user = bf.Deserialize(output) as User;
Console.WriteLine(user.Note); // 没有值,因为class中标注了不能被序列化
监控文件
public static void Watch() {
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "D:\\";
watcher.NotifyFilter = NotifyFilters.LastAccess;
watcher.Filter = "*.txt";
watcher.Changed += new FileSystemEventHandler(onChanged);
watcher.Created += ...;
watcher.Deleted += ...;
watcher.Renamed += ...;
watcher.EnableRaisingEvents = true;
}
public static void OnChanged(object sender, FileSystemEventArgs e){}
public static void OnRenamed(object sender, FileSystemEventArgs e){}