private CloudFile GetCloadFileByFileItem(string folder, IListFileItem fileItem) { string fileName = GetFileNameByFileItem(fileItem); var cloadFile = GetDirectory(folder).GetFileReference(fileName); return(cloadFile); }
/// <summary> /// Gets the full path of a file/directory. /// </summary> /// <param name="item">Indicating the file/directory object.</param> /// <returns>Returns the full path.</returns> public static string GetFullPath(this IListFileItem item) { // We need to make sure the share uri ends with "/" in order to // let MakeRelativeUri work properly. UriBuilder shareUri = new UriBuilder(item.Share.SnapshotQualifiedUri); if (!shareUri.Path.EndsWith(UriPathSeparator, StringComparison.Ordinal)) { shareUri.Path = string.Concat(shareUri.Path, UriPathSeparator); } CloudFile file = item as CloudFile; if (file != null) { return(shareUri.Uri.MakeRelativeUri(file.SnapshotQualifiedUri).ToString()); } CloudFileDirectory dir = item as CloudFileDirectory; if (dir != null) { return(shareUri.Uri.MakeRelativeUri(dir.SnapshotQualifiedUri).ToString()); } return(shareUri.Uri.MakeRelativeUri(item.Uri).ToString()); }
public async Task CloudFileDirectoryListFilesAndDirectoriesWithPrefixAsync() { CloudFileClient client = GenerateCloudFileClient(); string name = GetRandomShareName(); CloudFileShare share = client.GetShareReference(name); try { await share.CreateAsync(); if (await CloudFileDirectorySetupAsync(share)) { CloudFileDirectory topDir1 = share.GetRootDirectoryReference().GetDirectoryReference("TopDir1"); IEnumerable <IListFileItem> results = await ListFilesAndDirectoriesAsync(topDir1, "file"); List <IListFileItem> list = results.ToList(); Assert.IsTrue(list.Count == 1); IListFileItem item = list.ElementAt(0); Assert.IsTrue(item.Uri.Equals(share.Uri + "/TopDir1/File1")); Assert.AreEqual("File1", ((CloudFile)item).Name); results = await ListFilesAndDirectoriesAsync(topDir1, "mid"); list = results.ToList(); Assert.IsTrue(list.Count == 2); IListFileItem item1 = list.ElementAt(0); IListFileItem item2 = list.ElementAt(1); Assert.IsTrue(item1.Uri.Equals(share.Uri + "/TopDir1/MidDir1")); Assert.AreEqual("MidDir1", ((CloudFileDirectory)item1).Name); Assert.IsTrue(item2.Uri.Equals(share.Uri + "/TopDir1/MidDir2")); Assert.AreEqual("MidDir2", ((CloudFileDirectory)item2).Name); results = await ListFilesAndDirectoriesAsync( topDir1 /* directory */, "mid" /* prefix */, 1 /* maxCount */, null /* options */, null /* operationContext */); list = results.ToList(); Assert.IsTrue(list.Count() == 2); item1 = list.ElementAt(0); item2 = list.ElementAt(1); Assert.IsTrue(item1.Uri.Equals(share.Uri + "/TopDir1/MidDir1")); Assert.AreEqual("MidDir1", ((CloudFileDirectory)item1).Name); Assert.IsTrue(item2.Uri.Equals(share.Uri + "/TopDir1/MidDir2")); Assert.AreEqual("MidDir2", ((CloudFileDirectory)item2).Name); } } finally { share.DeleteIfExistsAsync().Wait(); } }
/// <summary> /// Gets the full path of a file/directory. /// </summary> /// <param name="item">Indicating the file/directory object.</param> /// <returns>Returns the full path.</returns> public static string GetFullPath(IListFileItem item) { UriBuilder shareUri = new UriBuilder(item.Share.Uri); if (!shareUri.Path.EndsWith("/", StringComparison.Ordinal)) { shareUri.Path = string.Concat(shareUri.Path, "/"); } return(shareUri.Uri.MakeRelativeUri(item.Uri).ToString()); }
public static FileSystemEntry CreateDictionaryEntry(IListFileItem listFileItem) { if (listFileItem is CloudFile) { return(CreateDictionaryEntry((CloudFile)listFileItem)); } if (listFileItem is CloudFileDirectory) { return(CreateDictionaryEntry((CloudFileDirectory)listFileItem)); } throw new ArgumentException("Argument type mismatch.", "listFileItem"); }
public async Task CloudFileDirectoryListFilesAndDirectoriesAsync() { CloudFileClient client = GenerateCloudFileClient(); string name = GetRandomShareName(); CloudFileShare share = client.GetShareReference(name); try { await share.CreateAsync(); if (await CloudFileDirectorySetupAsync(share)) { CloudFileDirectory topDir1 = share.GetRootDirectoryReference().GetDirectoryReference("TopDir1"); IEnumerable <IListFileItem> list1 = await ListFilesAndDirectoriesAsync(topDir1, null, null, null); List <IListFileItem> simpleList1 = list1.ToList(); ////Check if for 3 because if there were more than 3, the previous assert would have failed. ////So the only thing we need to make sure is that it is not less than 3. Assert.IsTrue(simpleList1.Count == 3); IListFileItem item11 = simpleList1.ElementAt(0); Assert.IsTrue(item11.Uri.Equals(share.Uri + "/TopDir1/File1")); Assert.AreEqual("File1", ((CloudFile)item11).Name); IListFileItem item12 = simpleList1.ElementAt(1); Assert.IsTrue(item12.Uri.Equals(share.Uri + "/TopDir1/MidDir1")); Assert.AreEqual("MidDir1", ((CloudFileDirectory)item12).Name); IListFileItem item13 = simpleList1.ElementAt(2); Assert.IsTrue(item13.Uri.Equals(share.Uri + "/TopDir1/MidDir2")); CloudFileDirectory midDir2 = (CloudFileDirectory)item13; Assert.AreEqual("MidDir2", ((CloudFileDirectory)item13).Name); IEnumerable <IListFileItem> list2 = await ListFilesAndDirectoriesAsync(midDir2, null, null, null); List <IListFileItem> simpleList2 = list2.ToList(); Assert.IsTrue(simpleList2.Count == 2); IListFileItem item21 = simpleList2.ElementAt(0); Assert.IsTrue(item21.Uri.Equals(share.Uri + "/TopDir1/MidDir2/EndDir1")); Assert.AreEqual("EndDir1", ((CloudFileDirectory)item21).Name); IListFileItem item22 = simpleList2.ElementAt(1); Assert.IsTrue(item22.Uri.Equals(share.Uri + "/TopDir1/MidDir2/EndDir2")); Assert.AreEqual("EndDir2", ((CloudFileDirectory)item22).Name); } } finally { share.DeleteIfExistsAsync().Wait(); } }
/// <summary> /// Gets the full path of a file/directory. /// </summary> /// <param name="item">Indicating the file/directory object.</param> /// <returns>Returns the full path.</returns> public static string GetFullPath(this IListFileItem item) { // We need to make sure the share uri ends with "/" in order to // let MakeRelativeUri work properly. UriBuilder shareUri = new UriBuilder(item.Share.Uri); if (!shareUri.Path.EndsWith(UriPathSeparator, StringComparison.Ordinal)) { shareUri.Path = string.Concat(shareUri.Path, UriPathSeparator); } return(shareUri.Uri.MakeRelativeUri(item.Uri).ToString()); }
public static string GetRelativeSubpath(this IListFileItem listFileItem) { // The first two segments of a file's URI are the root path, "/", // and a file share segment, e.g. "share-name/". When building up // the subpath to a file we exclude these two segments so that // subpaths are relative to the root share. var pathSegments = listFileItem.Uri.Segments.Skip(2); // Here we replace URI separators with directory path separators. pathSegments = pathSegments.Select(o => o.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar)); // Then join the remaining path segments together and return. return(string.Join(string.Empty, pathSegments)); }
private string GetQualifiedUri(IListFileItem listFileItem) { switch (listFileItem) { // absolute path case CloudFile cloudFile: return(cloudFile.StorageUri.PrimaryUri.ToString()); // relative path case CloudFileDirectory cloudFileDirectory: return($"{cloudFileDirectory.StorageUri.PrimaryUri.AbsolutePath.Replace(CloudFileShare.Name, string.Empty)}"); default: throw new ArgumentOutOfRangeException(nameof(listFileItem), "Type not supported"); } }
private static async Task DownloadFile(IListFileItem listFileItem, CloudFileDirectory cloudDirectory, string path) { var cloudFile = listFileItem as CloudFile; if (cloudFile == null) { return; } cloudFile = cloudDirectory.GetFileReference(cloudFile.Name); var pathToSave = $"{path}\\{Path.GetFileName(cloudFile.Name)}"; using (var fileStream = File.OpenWrite(pathToSave)) { await cloudFile.DownloadToStreamAsync(fileStream); } }
async Task ExecuteTapFileCommandAsync(IListFileItem fileItem) { if (fileItem == null) { return; } MessagingService.Current.Subscribe <MessageArgsDeleteFile>(MessageKeys.DeleteFile, async(m, argsDeleteFile) => { Navigation.PopAsync(); IProgressDialog deletingDialog = UserDialogs.Loading("Deleting File"); deletingDialog.Show(); try { var file = Files.Where(f => f.Share.Name == argsDeleteFile.FileName).FirstOrDefault(); if (file == null) { return; } await FileShare.BaseFileShare.GetRootDirectoryReference().GetFileReference(file.Share.Name).DeleteAsync(); App.Logger.Track(AppEvent.DeleteFile.ToString()); Files.Remove(file); FileAndDirectoryCount--; SortFiles(); } catch (Exception ex) { Logger.Report(ex, "Method", "HandleMessageArgsDeleteFile"); MessagingService.Current.SendMessage(MessageKeys.Error, ex); } finally { if (deletingDialog != null) { if (deletingDialog.IsShowing) { deletingDialog.Hide(); } deletingDialog.Dispose(); } } }); }
private static async Task DownloadDirectory(IListFileItem listFileItem, CloudFileDirectory cloudDirectory, string path) { var subDirectory = listFileItem as CloudFileDirectory; if (subDirectory == null) { return; } subDirectory = cloudDirectory.GetDirectoryReference(subDirectory.Name); var pathToSave = $"{path}\\{subDirectory.Name}"; if (!Directory.Exists(pathToSave)) { Directory.CreateDirectory(pathToSave); } await DownloadAllInDirectoryAsync(subDirectory, pathToSave); }
public static Blob ToBlob(string path, IListFileItem item) { if (item is CloudFile file) { var blob = new Blob(path, file.Name, BlobItemKind.File) { LastModificationTime = file.Properties.LastWriteTime, Size = file.Properties.Length, MD5 = file.Properties.ContentMD5 }; blob.TryAddProperties( "CopyState", file.CopyState?.ToString(), "ChangeTime", file.Properties.ChangeTime?.ToString(), "ContentType", file.Properties.ContentType, "CreationTime", file.Properties.CreationTime?.ToString(), "ETag", file.Properties.ETag, "IsServerEncrypted", file.Properties.IsServerEncrypted.ToString(), "LastModified", file.Properties.LastModified?.ToString(), "NtfsAttributes", file.Properties.NtfsAttributes?.ToString()); blob.Metadata.MergeRange(file.Metadata); return(blob); } else if (item is CloudFileDirectory dir) { var blob = new Blob(path, dir.Name, BlobItemKind.Folder) { LastModificationTime = dir.Properties.LastWriteTime }; blob.TryAddProperties( "ChangeTime", dir.Properties.ChangeTime?.ToString(), "CreationTime", dir.Properties.CreationTime?.ToString(), "ETag", dir.Properties.ETag, "IsServerEncrypted", dir.Properties.IsServerEncrypted.ToString(), "LastModified", dir.Properties.LastModified?.ToString(), "NtfsAttributes", dir.Properties.NtfsAttributes?.ToString()); blob.Metadata.MergeRange(dir.Metadata); return(blob); } else { throw new NotSupportedException($"don't know '{item.GetType()}' object type"); } }
private void FileDirectoryEscapingTest(string directoryName, string fileName) { CloudFileClient service = GenerateCloudFileClient(); CloudFileShare share = GetRandomShareReference(); try { share.Create(); string text = Guid.NewGuid().ToString(); // Create from CloudFileShare. CloudFileDirectory directory = share.GetRootDirectoryReference().GetDirectoryReference(directoryName); directory.Create(); CloudFile originalFile = directory.GetFileReference(fileName); originalFile.Create(0); // List directories from share. IListFileItem directoryFromShareListingFiles = share.GetRootDirectoryReference().ListFilesAndDirectories().First(); Assert.AreEqual(directory.Uri, directoryFromShareListingFiles.Uri); // List files from directory. IListFileItem fileFromDirectoryListingFiles = directory.ListFilesAndDirectories().First(); Assert.AreEqual(originalFile.Uri, fileFromDirectoryListingFiles.Uri); // Check Name Assert.AreEqual <string>(fileName, originalFile.Name); // Absolute URI access from CloudFile CloudFile fileInfo = new CloudFile(originalFile.Uri, service.Credentials); fileInfo.FetchAttributes(); // Access from CloudFileDirectory CloudFileDirectory cloudFileDirectory = share.GetRootDirectoryReference().GetDirectoryReference(directoryName); CloudFile fileFromCloudFileDirectory = cloudFileDirectory.GetFileReference(fileName); Assert.AreEqual(fileInfo.Uri, fileFromCloudFileDirectory.Uri); } finally { share.Delete(); } }
private string GetFileNameByFileItem(IListFileItem fileItem) { return(fileItem.Uri.AbsolutePath); }
public void CloudFileDirectoryListFilesAndDirectoriesAPM() { CloudFileClient client = GenerateCloudFileClient(); string name = GetRandomShareName(); CloudFileShare share = client.GetShareReference(name); try { share.Create(); if (CloudFileDirectorySetup(share)) { CloudFileDirectory topDir1 = share.GetRootDirectoryReference().GetDirectoryReference("TopDir1"); using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { FileContinuationToken token = null; List <IListFileItem> simpleList1 = new List <IListFileItem>(); do { IAsyncResult result = topDir1.BeginListFilesAndDirectoriesSegmented( null, null, null, null, ar => waitHandle.Set(), null); waitHandle.WaitOne(); FileResultSegment segment = topDir1.EndListFilesAndDirectoriesSegmented(result); simpleList1.AddRange(segment.Results); token = segment.ContinuationToken; }while (token != null); ////Check if for 3 because if there were more than 3, the previous assert would have failed. ////So the only thing we need to make sure is that it is not less than 3. Assert.IsTrue(simpleList1.Count == 3); IListFileItem item11 = simpleList1.ElementAt(0); Assert.IsTrue(item11.Uri.Equals(share.Uri + "/TopDir1/File1")); Assert.AreEqual("File1", ((CloudFile)item11).Name); IListFileItem item12 = simpleList1.ElementAt(1); Assert.IsTrue(item12.Uri.Equals(share.Uri + "/TopDir1/MidDir1")); Assert.AreEqual("MidDir1", ((CloudFileDirectory)item12).Name); IListFileItem item13 = simpleList1.ElementAt(2); Assert.IsTrue(item13.Uri.Equals(share.Uri + "/TopDir1/MidDir2")); Assert.AreEqual("MidDir2", ((CloudFileDirectory)item13).Name); CloudFileDirectory midDir2 = (CloudFileDirectory)item13; List <IListFileItem> simpleList2 = new List <IListFileItem>(); do { IAsyncResult result = midDir2.BeginListFilesAndDirectoriesSegmented( token, ar => waitHandle.Set(), null); waitHandle.WaitOne(); FileResultSegment segment = midDir2.EndListFilesAndDirectoriesSegmented(result); simpleList2.AddRange(segment.Results); token = segment.ContinuationToken; }while (token != null); Assert.IsTrue(simpleList2.Count == 2); IListFileItem item21 = simpleList2.ElementAt(0); Assert.IsTrue(item21.Uri.Equals(share.Uri + "/TopDir1/MidDir2/EndDir1")); Assert.AreEqual("EndDir1", ((CloudFileDirectory)item21).Name); IListFileItem item22 = simpleList2.ElementAt(1); Assert.IsTrue(item22.Uri.Equals(share.Uri + "/TopDir1/MidDir2/EndDir2")); Assert.AreEqual("EndDir2", ((CloudFileDirectory)item22).Name); } } } finally { share.DeleteIfExists(); } }
/// <summary> /// Write IListFileItem to output using specified service channel /// </summary> /// <param name="item">The output IListFileItem object</param> /// <param name="channel">IStorageFileManagement channel object</param> internal void WriteListFileItemObject(long taskId, IStorageFileManagement channel, IListFileItem item) { if ((item as CloudFile) != null) // CloudFile { WriteCloudFileObject(taskId, channel, item as CloudFile); } else { WriteCloudFileDirectoryeObject(taskId, channel, item as CloudFileDirectory); } }