一定要安装 MicroSoft 的 MS.ActiveSync 4.1 CHS.rar才行!代码为: using System; using System.Runtime.InteropServices; using System.IO; using System.Threading; namespace PDA { /// <summary> /// Class1 的摘要说明。 /// </summary> public class GuangMa { public GuangMa() { // // TODO: 在此处添加构造函数逻辑 // } private bool InitDevice(int nTimeout) { RAPIINIT ri = new RAPIINIT(); ri.cbsize = System.Runtime.InteropServices.Marshal.SizeOf(ri); uint hRes = CeRapiInitEx(ref ri); ManualResetEvent me = new ManualResetEvent(false); me.Handle = ri.heRapiInit; if (!me.WaitOne(nTimeout, true)) { CeRapiUninit(); return false; } else { return true; } } [DllImport("rapi.dll", CharSet=CharSet.Unicode)] internal static extern int CeRapiGetError(); [DllImport("rapi.dll", CharSet=CharSet.Unicode)] internal static extern int CeRapiInit(); private const uint GENERIC_WRITE = 0x40000000; // 设置读写权限 private const short CREATE_NEW = 1; // 创建新文件 private const short FILE_ATTRIBUTE_NORMAL = 0x80; // 设置文件属性 private const short INVALID_HANDLE_VALUE = -1; // 错误句柄 IntPtr remoteFile = IntPtr.Zero; byte[] buffer = new byte[0x1000]; // 传输缓冲区定义为4k FileStream localFile; int bytesread = 0; int byteswritten = 0; int filepos = 0; // 本地计算机文件名 LocalFileName ; // 远程设备文件名 RemoteFileName; public bool CopyFileToPDA(string LocalFileName,string RemoteFileName) { if(InitDevice(2000)) { //查找远程文件 CE_FIND_DATA findData = new CE_FIND_DATA(); int jieg = CeFindFirstFile(RemoteFileName,ref findData); if(jieg!=-1) { CeDeleteFile(RemoteFileName); } // 创建远程文件 remoteFile = CeCreateFile(RemoteFileName, GENERIC_WRITE, 0, 0, CREATE_NEW,FILE_ATTRIBUTE_NORMAL, 0); // 检查文件是否创建成功 if ((int)remoteFile == INVALID_HANDLE_VALUE) { throw new Exception("创建文件失败!"); } else { // 打开本地文件 localFile = new FileStream(LocalFileName, FileMode.Open); // 读取4K字节 bytesread = localFile.Read(buffer, filepos, buffer.Length); while(bytesread > 0) { // 移动文件指针到已读取的位置 filepos += bytesread; // 写缓冲区数据到远程设备文件 if(! Convert.ToBoolean(CeWriteFile(remoteFile, buffer, bytesread,ref byteswritten, 0))) { // 检查是否成功,不成功关闭文件句柄,抛出异常 CeCloseHandle(remoteFile); throw new Exception("写远程文件失败!"); } try { // 重新填充本地缓冲区 bytesread = localFile.Read(buffer, 0, buffer.Length); } catch(Exception) { bytesread = 0; } } // 关闭本地文件 localFile.Close(); // 关闭远程文件 CeCloseHandle(remoteFile); filepos = 0 ; CeRapiUninit(); return true; } } else { return false; } }
【引用】C#上传下载PDA数据
最新推荐文章于 2020-08-16 11:44:16 发布