将* .db从Windows 10 1703上传到Android的权限错误

时间:2017-05-23 20:22:30

标签: android sqlite windows-10 transfer permission-denied

我们有第三方程序可以从Android下载,删除和上传* .db文件到Windows。一切工作都很完美但是使用Windows 10 1703,上传停止工作(我的意思是从Windows 10到Android设备)。我的错误是法语,但翻译必须是:“尝试读取或写入受保护的内存。这通常是[...]”。奇怪的是,下载和删除仍然有效。哦,一切都适用于Windows 10 1607.

错误弹出行:“targetStream.Write(buffer,(int)optimalTransferSizeBytes,pcbWritten);”

我想在我的Android Devide上的许多文件夹中上传文件,但没有任何效果。另外,我尝试了几种类型的设备,LG手机,S7手机,CT4设备。

我正在研究手机权限和Windows 10权限,尝试使用管理员权限或兼容模式运行。但我无法理解为什么它停止工作。

我真的迷路了,一些答案或指南可能非常有用。非常感谢!

使用PortableDeviceApiLib.dll:

有上传代码(从Windows到Android)

public void TransferContentToDevice(string fileName,string parentObjectId)         {

        IPortableDeviceContent content;
        this._device.Content(out content);

        parentObjectId = parentObjectId + "";

        IPortableDeviceValues values =
            GetRequiredPropertiesForContentType(fileName, parentObjectId);

        PortableDeviceApiLib.IStream tempStream;
        uint optimalTransferSizeBytes = 0;
        content.CreateObjectWithPropertiesAndData(
            values,
            out tempStream,
            ref optimalTransferSizeBytes,
            null);

        System.Runtime.InteropServices.ComTypes.IStream targetStream =
            (System.Runtime.InteropServices.ComTypes.IStream)tempStream;
        try
        {

            using (var sourceStream =
                new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                var buffer = new byte[optimalTransferSizeBytes];
                int bytesRead;

                do
                {
                    bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes);

                    IntPtr pcbWritten = IntPtr.Zero;

                    if (bytesRead < (int)optimalTransferSizeBytes)
                    {

                        targetStream.Write(buffer, bytesRead, pcbWritten);
                    }
                    else
                    {                                

                        targetStream.Write(buffer, (int)optimalTransferSizeBytes, pcbWritten);     

                    }

                } while (bytesRead > 0);
            }

            targetStream.Commit(0);
        }
        finally
        {
            Marshal.ReleaseComObject(tempStream);
        }
    }

0 个答案:

没有答案