я получаю следующее сообщение об ошибке при разблокировании файлАрифметические операции привело к переполнению с #
Арифметические операции привело к переполнению
System.IntPtr.ToInt32
Я подозреваю, что это представляет собой следующую строку до pBuffer.ToInt32()
:
IntPtr iPtr = new IntPtr(pBuffer.ToInt32() + (i * Marshal.SizeOf(fi3)));
Я не могу воспроизвести ошибку самостоятельно, и ошибка не отображает правильный номер строки. Я ищу способ воспроизвести эту или любую обратную связь о возможной причине. Благодаря
public void Close()
{
const int MAX_PREFERRED_LENGTH = -1;
int readEntries;
int totalEntries;
IntPtr pBuffer = IntPtr.Zero;
FILE_INFO_3 fi3 = new FILE_INFO_3();
int iStatus = NetFileEnum(this.HostName, this.HostPathToShare + this.FileNameFromShare, null, 3, ref pBuffer, MAX_PREFERRED_LENGTH, out readEntries, out totalEntries, pBuffer);
if (iStatus == 0)
{
for (int i = 0; i < readEntries; i++)
{
IntPtr iPtr = new IntPtr(pBuffer.ToInt32() + (i * Marshal.SizeOf(fi3)));
fi3 = (FILE_INFO_3)Marshal.PtrToStructure(iPtr, typeof(FILE_INFO_3));
NetFileClose(this.HostName, fi3.fi3_id);
}
}
NetApiBufferFree(pBuffer);
}
[DllImport("netapi32.dll", SetLastError=true, CharSet = CharSet.Unicode)]
static extern int NetFileClose(
string servername,
int id);
[DllImport("Netapi32.dll", SetLastError=true)]
static extern int NetApiBufferFree(IntPtr Buffer);
[DllImport("netapi32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
static extern int NetFileEnum(
string servername,
string basepath,
string username,
int level,
ref IntPtr bufptr,
int prefmaxlen,
out int entriesread,
out int totalentries,
IntPtr resume_handle
);
Update
Я добавил код win32 Apis.
Ниже приведены правильные ответы и машина 64-бит. Но я не могу воспроизвести его на dev-сервере, несмотря на то, что среда dev составляет 64 бит. Любые идеи воспроизвести ошибку?
Ваш пример кода оленья кожа не говоря уже о ToInt64 я думаю, что в результате это может быть очень трудно любой из нас, чтобы воспроизвести его, если вы тоже не можете, и у вас есть весь ваш код. – BugFinder
@BugFinder Я обновил код, чтобы включить код win32 – H20rider