Чтобы скопировать файл с компьютера под управлением Windows 10 на устройство под управлением Windows CE 5.0, я использую следующий код (который входит в состав OpenNETCF Rapi для кредитования оригинального создателя):
public void CopyFileToDevice(string LocalFileName, string RemoteFileName, bool Overwrite)
{
// check for connection
CheckConnection();
FileStream localFile;
IntPtr remoteFile = IntPtr.Zero;
int bytesread = 0;
int byteswritten = 0;
int filepos = 0;
int create = Overwrite ? CREATE_ALWAYS : CREATE_NEW;
byte[] buffer = new byte[(int)m_FileCopyBufferSize]; // default size 4k transfer buffer
// create the remote file
remoteFile = CeCreateFile(RemoteFileName, GENERIC_WRITE, 0, 0, create, FILE_ATTRIBUTE_NORMAL, 0);
// check for success
if (remoteFile.ToInt64() == INVALID_HANDLE_VALUE)
{
throw new RAPIException("Could not create remote file");
}
// open the local file
localFile = new FileStream(LocalFileName, FileMode.Open, FileAccess.Read);
// read 4k of data
bytesread = localFile.Read(buffer, filepos, buffer.Length);
while (bytesread > 0)
{
// move remote file pointer # of bytes read
filepos += bytesread;
// write our buffer to the remote file
if (!Convert.ToBoolean(CeWriteFile(remoteFile, buffer, bytesread, ref byteswritten, 0)))
{ // check for success
CeCloseHandle(remoteFile);
throw new RAPIException("Could not write to remote file");
}
try
{
// refill the local buffer
bytesread = localFile.Read(buffer, 0, buffer.Length);
}
catch (Exception)
{
bytesread = 0;
}
}
// close the local file
localFile.Close();
// close the remote file
CeCloseHandle(remoteFile);
}
Иногда это решение работает, но без изменения кода, файла или устройств, которые он внезапно выдает RAPIException: "Could not write to remote file".
Это происходит в результате сбоя функции CeWriteFile
через некоторое время.
Что может привести к этой ошибке?