Код ошибки 3: ERROR_PATH_NOT_FOUND
. Кажется, вы допустили простую ошибку в именах файлов: один из каталогов в одном из имен файлов не существует.
В комментарии вы утверждаете, что неуспешный вызов имеет вид:
MoveFileEx(newFile, "", 4);
Это, безусловно, не удастся. То, что вы пытаетесь сделать, это передать NULL
в качестве имени файла назначения, чтобы удалить файл. Но вы не передаете NULL
, вы пропускаете пустую строку. Чтобы передать NULL
нативному API, вызовите его так:
bool res = MoveFileEx(filename, null,
MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
Я хотел бы убедиться, что вы включили SetLastError = true
в ваш пинвоук, чтобы вы могли диагностировать ошибки.
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool MoveFileEx(string lpExistingFileName,
string lpNewFileName, MoveFileFlags dwFlags);