Dee*_*mar 5 c# memory-mapped-files
我正在研究内存映射文件.有没有办法知道内存映射文件内容的长度?我想要的是附加现有的内存映射文件.它很容易在文件中附加字节,但我希望追加字符串.
我们可以检查CAPACITY属性,但它返回我认为的字节大小.
为了更清楚,我正在解释这个场景.我正在创建内存映射文件A.我在创建它时写"Hello".它工作正常.现在我想将"World"写入现有文件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);
}
Run Code Online (Sandbox Code Playgroud)
我用(//)标记了要求大小的行.我想知道(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);
}
Run Code Online (Sandbox Code Playgroud)
但它不附加任何东西.你能查一下我的代码吗?
您不能通过在流后写入更多字符来附加到流中的字符串,因为这不会改变已写入的字符串的长度。
此外,没有任何方法BinaryWriter可以让您像这样写入流中的特定位置。对于采用字符数组和两个整数的重载,第二个参数指定数组中的位置,而不是流中的位置。
如果要更改写入流中的字符串,则必须从流中读取字符串并使用新字符串重写流。
| 归档时间: |
|
| 查看次数: |
3958 次 |
| 最近记录: |