ich die folgende Fehlermeldung erhalten, wenn eine Datei EntriegelnArithmetic Operation führte zu einem Überlauf C#
Rechenoperation in einem Überlauf führte
System.IntPtr.ToInt32
ich es vermuten ist die folgende Zeile zu pBuffer.ToInt32()
:
IntPtr iPtr = new IntPtr(pBuffer.ToInt32() + (i * Marshal.SizeOf(fi3)));
Ich kann den Fehler nicht selbst reproduzieren und der Fehler zeigt nicht die richtige Zeilennummer an. Ich suche nach einer Möglichkeit, dies zu reproduzieren oder eine Rückmeldung über die mögliche Ursache. Dank
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
);
aktualisieren
ich hinzugefügt, um die Win32-API-Code.
Die folgenden Antworten sehen korrekt aus und die Maschine ist 64 Bit. Aber ich kann es nicht auf dem Dev-Server reproduzieren, obwohl die Entwicklungsumgebung 64 Bit ist. Irgendwelche Ideen, um den Fehler zu reproduzieren?
nicht Ihr Beispielcode tut einen ToInt64 erwähnt ich als Folge denken könnte es sehr schwierig sein, für Irgendwelche von uns, es zu reproduzieren, wenn Sie nicht können, und Sie haben Ihren ganzen Code. – BugFinder
@BugFinder Ich habe den Code aktualisiert, um den Win32-Code zu enthalten – H20rider