C#中的外部合并排序:无法读取流结尾以外的内容

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

因此,我试图在C#中实现外部合并排序,但我收到一个错误,它说:无法读取流末尾以外的内容。 调用MergeSort方法时,我使用以下参数:

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);
            }
        }

    }