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());
        }
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        /// <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());
        }
Exemple #8
0
        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));
        }
Exemple #9
0
        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");
            }
        }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        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();
                    }
                }
            });
        }
Exemple #12
0
        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);
        }
Exemple #13
0
 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");
     }
 }
Exemple #14
0
        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);
 }
Exemple #16
0
        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);
     }
 }