【发布时间】:2012-03-07 07:42:09
【问题描述】:
我正在处理内存映射文件。有没有办法知道内存映射文件内容的长度?我想要的是附加现有的内存映射文件。在文件中附加字节很容易,但我正在寻找附加字符串。
我们可以检查 CAPACITY 属性,但它返回我认为的字节大小。
为了更清楚,我正在解释这个场景。我正在创建内存映射文件 A。我在创建它时写了“Hello”。它工作正常。现在我想将“世界”写入现有文件 A。
我为此使用以下代码:
var file = MemoryMappedFile.OpenExisting("myFile");
string str = "String to append";
using (var view = file.CreateViewAccessor())
{
using (var stream = file.CreateViewStream())
{
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(str.ToArray(), INT SIZE,Convert.ToInt32(view.Capacity), str.Length);//Error
}
}
using (var stream = file.CreateViewStream())
{
Console.WriteLine("Reading appended File");
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
Console.WriteLine(reader.ReadString());
Console.WriteLine(string.Empty);
}
我已经用 (//) 标记了要求大小的行。我想知道 (INT SIZE) 的值 任何帮助将不胜感激。
[编辑]我使用的是 C#,Visual Studio 2010。
现在我正在使用此代码追加:
var file = MemoryMappedFile.OpenExisting("myFile");
string str = "String to append";
string str1 = string.Empty;
using (var stream = file.CreateViewStream())
{
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
str1 = reader.ReadString();
str1 = str1 + "\n" + str;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(str1);
}
using (var stream = file.CreateViewStream())
{
Console.WriteLine("Reading appended File");
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
Console.WriteLine(reader.ReadString());
Console.WriteLine(string.Empty);
}
但它没有附加任何东西。你能检查我的代码吗?
【问题讨论】: