I am writing an extension method, it solved my problem, you can refer to it when you need the following:
public static class FileExtentions { #region Fields private static readonly ulong MaxBufferSize = 16 * 1024 * 1024; #endregion // Fields #region Methods public static async Task<StorageFile> CopyAsync(this StorageFile self, StorageFolder desiredFolder, string desiredNewName, CreationCollisionOption option) { StorageFile desiredFile = await desiredFolder.CreateFileAsync(desiredNewName, option); StorageStreamTransaction desiredTransaction = await desiredFile.OpenTransactedWriteAsync(); BasicProperties props = await self.GetBasicPropertiesAsync(); IInputStream stream = await self.OpenSequentialReadAsync(); ulong copiedSize = 0L; while (copiedSize < props.Size) { ulong bufferSize = (props.Size - copiedSize) >= MaxBufferSize ? MaxBufferSize : props.Size - copiedSize; IBuffer buffer = BytesToBuffer(new byte[bufferSize]); await stream.ReadAsync(buffer, (uint)bufferSize, InputStreamOptions.None); await desiredTransaction.Stream.GetOutputStreamAt(copiedSize).WriteAsync(buffer); buffer = null; copiedSize += (bufferSize); Debug.WriteLine(DeviceStatus.ApplicationCurrentMemoryUsage); } await desiredTransaction.CommitAsync(); return desiredFile; } private static IBuffer BytesToBuffer(byte[] bytes) { using (var dataWriter = new DataWriter()) { dataWriter.WriteBytes(bytes); return dataWriter.DetachBuffer(); } } #endregion // Methods
source share