0

次のコードを使用して、Windows ポータブル デバイス API を使用して、FileInfo オブジェクトでラップされたファイルを 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