Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SetFilePointer奇怪的问题_C# - Fatal编程技术网

C# SetFilePointer奇怪的问题

C# SetFilePointer奇怪的问题,c#,C#,我正在尝试从物理驱动器读取扇区。但设置文件指针在一段时间后出现了一些奇怪的错误 [DllImport("kernel32.dll", EntryPoint = "SetFilePointer", CallingConvention = CallingConvention.StdCall)] static extern uint SetFilePointer( [In] IntPtr hFile, [In] int lDist

我正在尝试从物理驱动器读取扇区。但设置文件指针在一段时间后出现了一些奇怪的错误

[DllImport("kernel32.dll", EntryPoint = "SetFilePointer", CallingConvention = CallingConvention.StdCall)]
        static extern uint SetFilePointer(
              [In] IntPtr hFile,
              [In] int lDistanceToMove,
              [In,Out]  int lpDistanceToMoveHigh,
              [In] EMoveMethod dwMoveMethod);

public void SetFilePointer(LARGE_INTEGER li)
        {


            SetFilePointer((IntPtr)handle, li.LowPart, li.HighPart, EMoveMethod.Begin);

        }       
//values
HighPart    381 int
LowPart         -1323466752 int
如果将highPart传递为零,则其工作。在C版本中,它可以无任何问题地下载。但在c#版本中,当ever highvalue不为零时,会出现异常

其他信息:尝试读取或写入受保护内存。 这通常表示其他内存已损坏

你能提出修改意见吗

更新已解决 正如@mjwills建议的,我必须将签名更改为

    [DllImport("kernel32.dll", EntryPoint = "SetFilePointer")]
            static extern uint SetFilePointer(
          [In] Microsoft.Win32.SafeHandles.SafeFileHandle hFile,
          [In] int lDistanceToMove,
          [In, Out] ref int lpDistanceToMoveHigh,
          [In] EMoveMethod dwMoveMethod);

            public void SetFilePointer(LARGE_INTEGER li)
            {


                SetFilePointer(shandle, li.LowPart, ref li.HighPart, EMoveMethod.Begin);

            }

你能告诉我们为什么需要调用这个特定的API吗?以防万一这是一个XY问题-。您的声明与中所示的相同吗?@mjwills no让我试试signature@mjwills感谢您的指导,现在可以工作了。我更改了您提到的签名。第三个参数是错误的,它必须是
ref int
。错误版本只在高部分为0时才起作用,然后函数假定传递了NULL。请注意,这并不是对FileStream.Seek()的改进。FileStream具有处理异常情况的构造函数。