public override IAsyncOperation <BaseStorageFile> CopyAsync(IStorageFolder destinationFolder, string desiredNewName, NameCollisionOption option) { return(AsyncInfo.Run <BaseStorageFile>(async(cancellationToken) => { if (string.IsNullOrEmpty(destinationFolder.Path)) { throw new NotSupportedException(); } var destination = IO.Path.Combine(destinationFolder.Path, desiredNewName); var destFile = new NativeStorageFile(destination, desiredNewName, DateTime.Now); if (!IsAlternateStream) { if (!await Task.Run(() => NativeFileOperationsHelper.CopyFileFromApp(Path, destination, option != NameCollisionOption.ReplaceExisting))) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } else { destFile.CreateFile(); using (var inStream = await this.OpenStreamForReadAsync()) using (var outStream = await destFile.OpenStreamForWriteAsync()) { await inStream.CopyToAsync(outStream); await outStream.FlushAsync(); } } return destFile; })); }
public override IAsyncAction RenameAsync(string desiredName, NameCollisionOption option) { return(AsyncInfo.Run(async(cancellationToken) => { string destination = IO.Path.Combine(IO.Path.GetDirectoryName(Path), desiredName); var destFile = new NativeStorageFile(destination, desiredName, DateTime.Now); if (!IsAlternateStream) { if (!await Task.Run(() => NativeFileOperationsHelper.MoveFileFromApp(Path, destination))) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } else { destFile.CreateFile(); using (var inStream = await this.OpenStreamForReadAsync()) using (var outStream = await destFile.OpenStreamForWriteAsync()) { await inStream.CopyToAsync(outStream); await outStream.FlushAsync(); } await DeleteAsync(); } })); }