/// <summary> /// Moves a file from a given source url location to a given destination url. /// </summary> /// <returns><c>true</c>, if file was moved, <c>false</c> otherwise.</returns> /// <param name="fromURL">From UR.</param> /// <param name="toURL">To UR.</param> private bool MoveFile(string fromURL, string toURL) { bool successful = true; // Get source options var srcURL = NSUrl.FromFilename(fromURL); var srcIntent = NSFileAccessIntent.CreateReadingIntent(srcURL, NSFileCoordinatorReadingOptions.ForUploading); // Get destination options var dstURL = NSUrl.FromFilename(toURL); var dstIntent = NSFileAccessIntent.CreateReadingIntent(dstURL, NSFileCoordinatorReadingOptions.ForUploading); // Create an array var intents = new NSFileAccessIntent[] { srcIntent, dstIntent }; // Initialize a file coordination with intents var queue = new NSOperationQueue(); var fileCoordinator = new NSFileCoordinator(); fileCoordinator.CoordinateAccess(intents, queue, (err) => { // Was there an error? if (err != null) { // Yes, inform caller Console.WriteLine("Error: {0}", err.LocalizedDescription); successful = false; } }); // Return successful return(successful); }
public static async Task <FileResult[]> EnsurePhysicalFileResultsAsync(params NSUrl[] urls) { if (urls == null || urls.Length == 0) { return(Array.Empty <FileResult>()); } var opts = NSFileCoordinatorReadingOptions.WithoutChanges; var intents = urls.Select(x => NSFileAccessIntent.CreateReadingIntent(x, opts)).ToArray(); using var coordinator = new NSFileCoordinator(); var tcs = new TaskCompletionSource <FileResult[]>(); coordinator.CoordinateAccess(intents, new NSOperationQueue(), error => { if (error != null) { tcs.TrySetException(new NSErrorException(error)); return; } var bookmarks = new List <FileResult>(); foreach (var intent in intents) { var url = intent.Url; var result = new BookmarkDataFileResult(url); bookmarks.Add(result); } tcs.TrySetResult(bookmarks.ToArray()); }); return(await tcs.Task); }