C# 内存映射文件访问异常
我正在尝试使用MemoryMap读取一个大文件(二进制\文本混合) 然而,在我的循环迭代中,它只是给出了一个访问异常;只是它,它没有说明它是什么样的异常,为什么它不能阅读,等等。我已经试着弄清楚了几个小时,但没有得出任何结论 下面是我用来阅读的代码:C# 内存映射文件访问异常,c#,io,memory-mapped-files,C#,Io,Memory Mapped Files,我正在尝试使用MemoryMap读取一个大文件(二进制\文本混合) 然而,在我的循环迭代中,它只是给出了一个访问异常;只是它,它没有说明它是什么样的异常,为什么它不能阅读,等等。我已经试着弄清楚了几个小时,但没有得出任何结论 下面是我用来阅读的代码: //numOfColors = 6 private static void ReadChunksFromLargeFile(int offsetToBegin, string fName, int numOfC
//numOfColors = 6
private static void ReadChunksFromLargeFile(int offsetToBegin, string fName, int numOfColors)
{
var idx = offsetToBegin;
int byteSizeForEachColor = (int)new FileInfo(fName).Length/ numOfColors;
var buffer = new byte[byteSizeForEachColor];
using (var mmf = MemoryMappedFile.CreateFromFile(fName))
{
for(int i=0; i < numOfColors; i++)
{
//numOfColors = 6
using (var view = mmf.CreateViewStream(idx, byteSizeForEachColor, MemoryMappedFileAccess.Read))
{
view.Seek(idx, SeekOrigin.Begin);
view.Read(buffer, 0, byteSizeForEachColor);
var temp = ByteArrayToHexString(buffer);
File.WriteAllText($@"C:\test\buffertest{i}.hex", temp);
}
idx += byteSizeForEachColor;
}
}
}
//numofolors=6
私有静态void ReadChunksFromLargeFile(int offsetToBegin,string fName,int numOfColors)
{
var idx=offsetToBegin;
int byteSizeForEachColor=(int)新文件信息(fName).Length/numofolors;
var buffer=新字节[byteSizeForEachColor];
使用(var mmf=MemoryMappedFile.CreateFromFile(fName))
{
对于(int i=0;i
编辑:offsetToBegin是937
我想做的是根据我需要的大小来阅读大量的内容。然而,当i=5时,它只是抛出异常
我试图读取的文件如下:
欢迎您的任何意见。谢谢 你的计算错了。计算每种颜色的大小时,没有考虑不需要的偏移量。调用
CreateViewFromStream
并告诉它跳过偏移量
时,它试图读取太多字节,导致AccessException
例如:
- 文件大小=60字节
- 偏移量=2字节
- 颜色数=6
- byteSizeForEachColor=10
- 5 x(10+2)=60
- 6 x(10+2)=72//该文件只有60字节长-太长了
offsetToBegin
,以确保它只读取正确的字节数
使用上述值
- bytesizeForEachColor=(60/6)-2=8
using (var view = mmf.CreateViewStream(idx, byteSizeForEachColor - idx, MemoryMappedFileAccess.Read))
{
...
}
现在,每个循环将跳过2个字节并读取8个-这不会导致它超出文件的长度。文件有多大?什么是
numofolors
?我猜文件大小减去偏移量,应该在颜色数之间平均分配?在除以numofolors
之前,您是否尝试过从FileInfo.Length
值中减去offsetToBegin
?@SimplyGed我也尝试过从0(begin)开始,遇到了同样的问题。该文件为39585152字节。即使从0开始,我也有同样的异常。对不起,我忘了说NumofColor是6。我将把这些信息添加到问题中。我已经有一段时间没有使用MM IO了,但是为什么不创建整个文件的视图并在其中查找,而不是分配多个视图呢?