C#中的外部合并排序:无法读取流结尾以外的内容
因此,我试图在C#中实现外部合并排序,但我收到一个错误,它说:无法读取流末尾以外的内容。 调用MergeSort方法时,我使用以下参数:C#中的外部合并排序:无法读取流结尾以外的内容,c#,external,mergesort,disk,C#,External,Mergesort,Disk,因此,我试图在C#中实现外部合并排序,但我收到一个错误,它说:无法读取流末尾以外的内容。 调用MergeSort方法时,我使用以下参数: MergeSort(fileName, 0, elementCount - 1) 我试图从0更改为1,并从(elementCount-1)更改为elementCount,但没有成功。 合并排序和合并方法: class BinaryOperations { string fileName; public BinaryOp
MergeSort(fileName, 0, elementCount - 1)
我试图从0更改为1,并从(elementCount-1)更改为elementCount,但没有成功。
合并排序和合并方法:
class BinaryOperations
{
string fileName;
public BinaryOperations(string fileName)
{
this.fileName = fileName;
}
public int getElement(int index)
{
BinaryReader reader = new BinaryReader(File.Open(fileName,
FileMode.Open, FileAccess.Read));
reader.BaseStream.Seek(index * 4, SeekOrigin.Begin);
int value = reader.ReadInt32();
reader.Close();
return value;
}
public void setElement(int index, int value)
{
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Open, FileAccess.ReadWrite));
writer.Seek(index * 4, SeekOrigin.Begin);
writer.Write(value);
writer.Close();
}
public void newFile(int size)
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fs.SetLength(size);
}
}
}
完全错误:
!!未处理的异常:System.IO.EndOfStreamException:无法读取流结尾以外的内容。
在System.IO.BinaryReader.FillBuffer处(Int32 numBytes)
在System.IO.BinaryReader.ReadInt32()中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\BinaryOperations.getElement(Int32索引)中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.Merge(字符串文件名,Int32左,Int32中,Int32右)中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.MergeSort(字符串文件名,Int32左,Int32右)中的C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.cs:第35行
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.MergeSort(字符串文件名,Int32左,Int32右)中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.MergeSort(字符串文件名,Int32左,Int32右)中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.MergeSort(字符串文件名,Int32左,Int32右)中
在C:\Users\Laptop\source\repos\Merge\u Sort\Merge\u Sort\Program.Main(字符串[]args)中的Merge\u Sort.Program.cs:第16行
什么是元素计数?文件中的字节数?还有一行“reader.BaseStream.Seek(index*4,SeekOrigin.Begin);”。。。为什么其中有一个4-此方法是基于字节定位的,并且它的读取可能超过了文件的末尾。@dodgy_coder elementCount是我文件中的整数数,例如,我的文件:“4 5 6”,因此elementCount是3。索引*4是因为整数需要4个字节,还是我错了?是二进制文件,还是可以在记事本中查看的文本文件?如果它是二进制文件,那么每个整数4个字节听起来是正确的,但是如果它是文本文件,那就不起作用了…@dodgy_coder是的,它是二进制文件,我正在使用BinaryWriter用随机整数填充它
class BinaryOperations
{
string fileName;
public BinaryOperations(string fileName)
{
this.fileName = fileName;
}
public int getElement(int index)
{
BinaryReader reader = new BinaryReader(File.Open(fileName,
FileMode.Open, FileAccess.Read));
reader.BaseStream.Seek(index * 4, SeekOrigin.Begin);
int value = reader.ReadInt32();
reader.Close();
return value;
}
public void setElement(int index, int value)
{
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Open, FileAccess.ReadWrite));
writer.Seek(index * 4, SeekOrigin.Begin);
writer.Write(value);
writer.Close();
}
public void newFile(int size)
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fs.SetLength(size);
}
}
}