0

我正在使用以下代码将由 FileInfo 对象包装的文件复制到使用 Windows 便携式设备 API 的 MTP 设备:

public static void CopyFileToDevice(PortableDeviceFolder parent, string name, FileInfo file)
    {
        IPortableDeviceValues values = GetRequiredPropertiesForContentType(parent.Id, name, file.Length);

        PortableDeviceApiLib.IStream tempStream;
        uint blockSize = 0;
        parent.Device.Content.CreateObjectWithPropertiesAndData(
            values,
            out tempStream,
            ref blockSize,
            null);

        System.Runtime.InteropServices.ComTypes.IStream targetStream =
            (System.Runtime.InteropServices.ComTypes.IStream)tempStream;
        try
        {
            using (var sourceStream = file.OpenRead())
            {
                var buffer = new byte[blockSize];
                int bytesRead;
                do
                {
                    bytesRead = sourceStream.Read(buffer, 0, (int)blockSize);
                    targetStream.Write(buffer, bytesRead, IntPtr.Zero);
                } while (bytesRead > 0);
            }

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

现在,这工作得很好,但是当编写一个小文件时,在这种情况下是一个只有几 kiB 的纯文本 .m3u 文件,该行

targetStream.Commit(0);

执行时间极长。写入几个 MiB 的文件时,没有任何问题。我想知道为什么会发生这种情况以及如何解决这个问题。谢谢!

4

0 回答 0