diff --git a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs index 69b61051e9..f0c22d7f38 100644 --- a/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs +++ b/src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs @@ -172,7 +172,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder { } - public async Task CreateFile(string name) + public async Task CreateFileAsync(string name) { var mimeType = MimeTypeMap.Singleton?.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(name)) ?? "application/octet-stream"; var newFile = Document.CreateFile(mimeType, name); @@ -185,7 +185,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder return new AndroidStorageFile(Activity, newFile.Uri, this); } - public async Task CreateFolder(string name) + public async Task CreateFolderAsync(string name) { var newFolder = Document?.CreateDirectory(name); @@ -211,9 +211,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder async Task DeleteContents(AndroidStorageFolder storageFolder) { - var files = await storageFolder.GetItemsAsync(); - - foreach (var file in files) + await foreach (var file in storageFolder.GetItemsAsync()) { if(file is AndroidStorageFolder folder) { @@ -240,7 +238,7 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder { yield break; } - + var contentResolver = Activity.ContentResolver; if (contentResolver == null) { @@ -273,7 +271,6 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder { continue; } - yield return isDirectory ? new AndroidStorageFolder(Activity, uri, false, this, root) : new AndroidStorageFile(Activity, uri, this, root); } @@ -291,15 +288,14 @@ internal class AndroidStorageFolder : AndroidStorageItem, IStorageBookmarkFolder async Task MoveRecursively(AndroidStorageFolder storageFolder, AndroidStorageFolder destination) { - destination = await destination.CreateFolder(storageFolder.Name) as AndroidStorageFolder; + destination = await destination.CreateFolderAsync(storageFolder.Name) as AndroidStorageFolder; if (destination == null) { return null; } - var files = await storageFolder.GetItemsAsync(); - foreach (var file in files) + await foreach (var file in storageFolder.GetItemsAsync()) { if (file is AndroidStorageFolder folder) { @@ -502,20 +498,27 @@ internal sealed class AndroidStorageFile : AndroidStorageItem, IStorageBookmarkF } } - async Task MoveFileByCopy() + async Task MoveFileByCopy() { - var newFile = await storageFolder.CreateFile(Name) as AndroidStorageFile; + var newFile = await storageFolder.CreateFileAsync(Name) as AndroidStorageFile; - if (newFile != null) + try { - using var input = await OpenReadAsync(); - using var output = await newFile.OpenWriteAsync(); + if (newFile != null) + { + using var input = await OpenReadAsync(); + using var output = await newFile.OpenWriteAsync(); - await input.CopyToAsync(output); + await input.CopyToAsync(output); - await DeleteAsync(); + await DeleteAsync(); - return new AndroidStorageFile(Activity, newFile.Uri, storageFolder); + return new AndroidStorageFile(Activity, newFile.Uri, storageFolder); + } + } + catch + { + newFile?.DeleteAsync(); } return null; diff --git a/src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs b/src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs index b9e74104c8..8c657fb787 100644 --- a/src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs +++ b/src/Avalonia.Base/Platform/Storage/FileIO/BclStorageFolder.cs @@ -113,7 +113,7 @@ internal class BclStorageFolder : IStorageBookmarkFolder return null; } - public async Task CreateFile(string name) + public async Task CreateFileAsync(string name) { var fileName = System.IO.Path.Combine(DirectoryInfo.FullName, name); var newFile = new FileInfo(fileName); @@ -123,7 +123,7 @@ internal class BclStorageFolder : IStorageBookmarkFolder return new BclStorageFile(newFile); } - public async Task CreateFolder(string name) + public async Task CreateFolderAsync(string name) { var newFolder = DirectoryInfo.CreateSubdirectory(name); diff --git a/src/Avalonia.Base/Platform/Storage/IStorageFolder.cs b/src/Avalonia.Base/Platform/Storage/IStorageFolder.cs index 61feeba79a..a9d1ff3669 100644 --- a/src/Avalonia.Base/Platform/Storage/IStorageFolder.cs +++ b/src/Avalonia.Base/Platform/Storage/IStorageFolder.cs @@ -23,12 +23,12 @@ public interface IStorageFolder : IStorageItem /// /// The display name /// A new pointing to the moved file. If not null, the current storage item becomes invalid - Task CreateFile(string name); + Task CreateFileAsync(string name); /// /// Creates a folder with specified name as a child of the current storage folder /// /// The display name /// A new pointing to the moved file. If not null, the current storage item becomes invalid - Task CreateFolder(string name); + Task CreateFolderAsync(string name); } diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs index 91b65a1f72..72ebf10984 100644 --- a/src/Avalonia.Controls.DataGrid/DataGrid.cs +++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs @@ -6066,8 +6066,9 @@ namespace Avalonia.Controls var numberOfItem = clipboardRowContent.Count; for (int cellIndex = 0; cellIndex < numberOfItem; cellIndex++) { - var cellContent = clipboardRowContent[cellIndex]; - text.Append(cellContent.Content); + var cellContent = clipboardRowContent[cellIndex].Content?.ToString(); + cellContent = cellContent?.Replace("\"", "\"\""); + text.Append($"\"{cellContent}\""); if (cellIndex < numberOfItem - 1) { text.Append('\t');