有没有办法做到这一点:
this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var sr = new StreamReader(this.logFile))
{
// Read the data in
}
// ... later on in the class ...
this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var sw = new StreamWriter(this.logFile))
{
// Write additional data out...
}
Run Code Online (Sandbox Code Playgroud)
无需打开文件两次?
我似乎无法使StreamReader不处理我的流.我也不想让它超出范围.然后垃圾收集器最终将调用Dispose,杀死流.
我想将一个String写入一个Stream(本例中是一个MemoryStream)并逐个读取这些字节.
stringAsStream = new MemoryStream();
UnicodeEncoding uniEncoding = new UnicodeEncoding();
String message = "Message";
stringAsStream.Write(uniEncoding.GetBytes(message), 0, message.Length);
Console.WriteLine("This:\t\t" + (char)uniEncoding.GetBytes(message)[0]);
Console.WriteLine("Differs from:\t" + (char)stringAsStream.ReadByte());
Run Code Online (Sandbox Code Playgroud)
我得到的(不受欢迎的)结果是:
This: M
Differs from: ?
Run Code Online (Sandbox Code Playgroud)
它看起来像它没有被正确读取,为"信息"的第一个字符是"M",从UnicodeEncoding实例获取字节时,但不读他们从流回来时,其工作原理.
我究竟做错了什么?
更大的图片:我有一个算法可以处理Stream的字节,我希望尽可能通用并使用任何Stream.我想将ASCII-String转换为MemoryStream,或者使用另一种方法将String作为Stream处理.有问题的算法将处理Stream的字节.