Esempio n. 1
0
        public static bool DownloadFileShare(string localFolder)
        {
            try
            {
                CloudFileShare share = GetFileShare();

                List <IListFileItem>  results = new List <IListFileItem>();
                FileContinuationToken token   = null;

                Task.Run(async() =>
                {
                    do
                    {
                        FileResultSegment resultSegment = await share.GetRootDirectoryReference().ListFilesAndDirectoriesSegmentedAsync(token);
                        results.AddRange(resultSegment.Results);
                        token = resultSegment.ContinuationToken;
                    }while (token != null);
                });
            }
            catch (Exception ex)
            {
                if (_feedback != null)
                {
                    _feedback.OnException(fileClient, ex);
                }

                return(false);
            }

            return(true);
        }
        public async Task <List <string> > GetPatients(int maxPatients = 0)
        {
            var ret                     = new List <string>();
            int numPatients             = 0;
            FileContinuationToken token = null;

            try
            {
                do
                {
                    FileResultSegment resultSegment = await PatientDirectory.ListFilesAndDirectoriesSegmentedAsync(token);

                    foreach (var item in resultSegment.Results)
                    {
                        string filename = System.IO.Path.GetFileName(item.Uri.LocalPath);
                        if (item.Uri.Segments.Last().Contains(".json") && !item.Uri.Segments.Last().Contains("hospitalInformation"))
                        {
                            ret.Add(item.Uri.Segments.Last());
                            numPatients++;
                        }
                        if (maxPatients != 0 && numPatients >= maxPatients)
                        {
                            return(ret);
                        }
                    }
                    token = resultSegment.ContinuationToken;
                }while (token != null);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return(ret);
        }
Esempio n. 3
0
        private static async Task refineLogs()
        {
            StorageConnection conn             = new StorageConnection();
            string            connectionString = "DefaultEndpointsProtocol=https;AccountName=storageaccountgepte86f5;AccountKey=tWMNBa2qlEgVEt6cOnmDbYdsJ0igQmnmJzcJx2d5lxuf0y1iYyMEbkM9n8KlUfPvlSF9Mtc3KE5CrhAWy/fpAg==;EndpointSuffix=core.windows.net";

            conn.config = new MyConfig()
            {
                StorageConnection = connectionString, Container = "techathoninput"
            };
            conn.Connect();
            CloudStorageAccount sAccount   = conn.storageAccount;
            CloudFileClient     fileClient = sAccount.CreateCloudFileClient();

            CloudFileShare share = fileClient.GetShareReference("scheduledfileconverter91d0");

            if (await share.ExistsAsync())
            {
                CloudFileDirectory rootDir = share.GetRootDirectoryReference();
                CloudFileDirectory dir     = rootDir.GetDirectoryReference(@"LogFiles/Application/Functions/Function/Function");
                CloudFile          logs    = rootDir.GetFileReference("Logs.txt");
                if (await dir.ExistsAsync())
                {
                    List <IListFileItem>  results = new List <IListFileItem>();
                    FileContinuationToken token   = null;
                    do
                    {
                        FileResultSegment resultSegment = await dir.ListFilesAndDirectoriesSegmentedAsync(token);

                        results.AddRange(resultSegment.Results);
                        token = resultSegment.ContinuationToken;
                    }while (token != null);
                    List <CloudFile> files = new List <CloudFile>();
                    foreach (IListFileItem item in results)
                    {
                        if (item.GetType() == typeof(Microsoft.WindowsAzure.Storage.File.CloudFile))
                        {
                            files.Add((CloudFile)item);
                        }
                    }
                    string name = "";
                    foreach (CloudFile file in files)
                    {
                        name = (string.Compare(name, Path.GetFileNameWithoutExtension(file.Name)) > 0) ? name : Path.GetFileNameWithoutExtension(file.Name);
                    }
                    name += ".log";
                    CloudFile recentFile = dir.GetFileReference(name);
                    string    data       = await recentFile.DownloadTextAsync();

                    string[] lines = data.Split("\n");
                    if (lines.Length < 50)
                    {
                        await logs.UploadTextAsync(data);
                    }
                    else
                    {
                        await logs.UploadTextAsync(string.Join("\n", lines.Skip(lines.Length - 50).ToArray()));
                    }
                }
            }
        }
Esempio n. 4
0
        private async Task DeleteDirectoryAsync(CloudFileDirectory dir, CancellationToken cancellationToken)
        {
            FileContinuationToken token = null;

            do
            {
                FileResultSegment chunk = await dir.ListFilesAndDirectoriesSegmentedAsync(token, cancellationToken).ConfigureAwait(false);

                foreach (IListFileItem item in chunk.Results)
                {
                    if (item is CloudFile file)
                    {
                        await file.DeleteIfExistsAsync(cancellationToken).ConfigureAwait(false);
                    }
                    else if (item is CloudFileDirectory subdir)
                    {
                        await DeleteDirectoryAsync(subdir, cancellationToken).ConfigureAwait(false);

                        await subdir.DeleteIfExistsAsync().ConfigureAwait(false);
                    }
                }

                token = chunk.ContinuationToken;
            }while(token != null);
        }
Esempio n. 5
0
        private static async void GetListOfFilesSegmented()
        {
            var            client         = cloudStorageAccount.CreateCloudFileClient();
            CloudFileShare cloudFileShare = client.GetShareReference("trial");

            if (cloudFileShare != null && await cloudFileShare.ExistsAsync())
            {
                CloudFileDirectory cloudFileDirectory = cloudFileShare.GetRootDirectoryReference();
                if (cloudFileDirectory != null && await cloudFileDirectory.ExistsAsync())
                {
                    FileContinuationToken fileContinuationToken = new FileContinuationToken();

                    do
                    {
                        FileResultSegment fileResultSegment = await cloudFileDirectory.ListFilesAndDirectoriesSegmentedAsync(fileContinuationToken);

                        foreach (CloudFile result in fileResultSegment.Results)
                        {
                            Console.WriteLine($"{result.Name} - {result.Properties.Length} bytes");
                        }
                        fileContinuationToken = fileResultSegment.ContinuationToken;
                    } while (fileContinuationToken != null);
                }
                else
                {
                    Console.WriteLine("Cloud file directory is null");
                }
            }
            else
            {
                Console.WriteLine("Cloud file share is null");
            }
        }
        public async Task DownloadFile()
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(AzureStorageAccount);
            CloudFileClient     fileClient     = storageAccount.CreateCloudFileClient();

            FileContinuationToken token = null;
            ShareResultSegment    shareResultSegment = await fileClient.ListSharesSegmentedAsync("Pat", token);

            foreach (CloudFileShare share in shareResultSegment.Results)
            {
                CloudFileDirectory rootDir   = share.GetRootDirectoryReference();
                CloudFileDirectory sampleDir = rootDir.GetDirectoryReference(DateTime.Now.ToString("yyyyMMdd"));
                if (await sampleDir.ExistsAsync())
                {
                    do
                    {
                        FileResultSegment resultSegment = await sampleDir.ListFilesAndDirectoriesSegmentedAsync(token);

                        token = resultSegment.ContinuationToken;

                        List <IListFileItem> listedFileItems = new List <IListFileItem>();

                        foreach (IListFileItem listResultItem in resultSegment.Results)
                        {
                            var cloudFile = sampleDir.GetFileReference(listResultItem.Uri.ToString());
                            Console.WriteLine(cloudFile.Uri.ToString());
                            //await cloudFile.DownloadToFileAsync(cloudFile.Uri.ToString(), FileMode.Create);
                        }
                    }while (token != null);
                }
            }
        }
Esempio n. 7
0
        public static async void RunAsync([TimerTrigger("* */1 * * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context)
        {
            //log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            var connStr = Utils.Utility.GetConfigurationItem(context, "Storage_Connection_String");

            var queueName     = Utils.Utility.GetConfigurationItem(context, "Queue-Name");
            var fileShareName = Utils.Utility.GetConfigurationItem(context, "Share-Out");


            string directoryName = null;
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connStr);

            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
            CloudFileShare  fileShare  = fileClient.GetShareReference(fileShareName); //Get a reference to the passed fileShare
            //Get a reference to the passed Directory
            CloudFileDirectory shareDirectory;

            if (String.IsNullOrEmpty(directoryName))
            {
                shareDirectory = fileShare.GetRootDirectoryReference();
            }
            else
            {
                shareDirectory = fileShare.GetRootDirectoryReference().GetDirectoryReference(directoryName);
            }

            List <IListFileItem> lstFiles = new List <IListFileItem>();

            FileContinuationToken token = null;

            if (fileShare.ExistsAsync().Result)
            {
                do
                {
                    FileResultSegment resultSegment = await shareDirectory.ListFilesAndDirectoriesSegmentedAsync(token);

                    lstFiles.AddRange(resultSegment.Results);
                    token = resultSegment.ContinuationToken;
                } while (token != null);
            }

            foreach (var file in lstFiles)
            {
                await addFileToQueueAsync(queueName, file.Uri.ToString(), connStr);

                string filename = System.IO.Path.GetFileName(file.Uri.LocalPath);
                log.LogInformation($"Queued File: {filename}");
                int statusCode = await AzTable.TableLogger.writeToTable(filename, "Azure Files", Utils.Utility.NextHop.Queue, context);

                if (statusCode >= 200)
                {
                    log.LogInformation("File Motion logged to Table");
                }
            }
        }
Esempio n. 8
0
        public async Task <List <string> > ListFiles(string shareName, string folder)
        {
            List <string> toReturn = new List <string>();

            try
            {
                CloudStorageAccount storageAccount  = CreateStorageAccountFromConnectionString(this.ConnectionString);
                CloudFileClient     cloudFileClient = storageAccount.CreateCloudFileClient();

                CloudFileShare cloudFileShare = cloudFileClient.GetShareReference(shareName);
                await cloudFileShare.CreateIfNotExistsAsync();

                CloudFileDirectory rootDirectory = cloudFileShare.GetRootDirectoryReference();
                CloudFileDirectory fileDirectory = null;
                if (!string.IsNullOrEmpty(folder))
                {
                    fileDirectory = rootDirectory.GetDirectoryReference(folder);
                }
                else
                {
                    fileDirectory = rootDirectory;
                }
                await fileDirectory.CreateIfNotExistsAsync();

                List <IListFileItem>  results = new List <IListFileItem>();
                FileContinuationToken token   = null;
                do
                {
                    FileResultSegment resultSegment = await fileDirectory.ListFilesAndDirectoriesSegmentedAsync(token);

                    results.AddRange(resultSegment.Results);
                    token = resultSegment.ContinuationToken;
                }while (token != null);

                foreach (var item in results)
                {
                    if (item.GetType() == typeof(CloudFile))
                    {
                        CloudFile file = (CloudFile)item;
                        toReturn.Add(file.Name);
                    }
                }
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.ToString();
            }
            return(toReturn);
        }
Esempio n. 9
0
        /// <summary>
        /// Get the list of all files and directories under the root directory.
        /// </summary>
        /// <param name="root">The share root directory.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>The async task.</returns>
        public async Task <IListFileItem[]> GetItems(CloudFileDirectory root, CancellationToken cancellationToken)
        {
            List <IListFileItem>  results = new List <IListFileItem>();
            FileContinuationToken token   = null;

            do
            {
                // Get the set of data.
                FileResultSegment resultSegment = await root.ListFilesAndDirectoriesSegmentedAsync(token, cancellationToken);

                results.AddRange(resultSegment.Results);
                token = resultSegment.ContinuationToken;
            }while (token != null);

            // Return the list.
            return(results.ToArray());
        }
Esempio n. 10
0
        public async Task <List <IListFileItem> > getFilesFromAzure()
        {
            FileSharePermissions permissions = await share.GetPermissionsAsync();

            // List all files/directories under the root directory
            Console.WriteLine("4. List Files/Directories in root directory");
            List <IListFileItem>  results = new List <IListFileItem>();
            FileContinuationToken token   = null;

            do
            {
                FileResultSegment resultSegment = await share.GetRootDirectoryReference().GetDirectoryReference(directoryName).ListFilesAndDirectoriesSegmentedAsync(token);

                results.AddRange(resultSegment.Results);
                token = resultSegment.ContinuationToken;
            }while (token != null);
            return(results);
        }
Esempio n. 11
0
        protected override async Task <IReadOnlyCollection <Blob> > ListAtAsync(
            string path, ListOptions options, CancellationToken cancellationToken)
        {
            if (StoragePath.IsRootPath(path))
            {
                //list file shares

                ShareResultSegment shares = await _client.ListSharesSegmentedAsync(null, cancellationToken).ConfigureAwait(false);

                return(shares.Results.Select(AzConvert.ToBlob).ToList());
            }
            else
            {
                var chunk = new List <Blob>();

                CloudFileDirectory dir = await GetDirectoryReferenceAsync(path, cancellationToken).ConfigureAwait(false);

                FileContinuationToken token = null;
                do
                {
                    try
                    {
                        FileResultSegment segment = await dir.ListFilesAndDirectoriesSegmentedAsync(options.FilePrefix, token, cancellationToken).ConfigureAwait(false);

                        token = segment.ContinuationToken;

                        chunk.AddRange(segment.Results.Select(r => AzConvert.ToBlob(path, r)));
                    }
                    catch (AzStorageException ex) when(ex.RequestInformation.ErrorCode == "ShareNotFound")
                    {
                        break;
                    }
                    catch (AzStorageException ex) when(ex.RequestInformation.ErrorCode == "ResourceNotFound")
                    {
                        break;
                    }
                }while(token != null);

                return(chunk);
            }
        }
Esempio n. 12
0
        public async Task <IEnumerable <CloudFile> > GetFiles()
        {
            do
            {
                List <CloudFile> cloudFiles = new List <CloudFile>();

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(AzureStorageAccount);
                CloudFileClient     fileClient     = storageAccount.CreateCloudFileClient();

                FileContinuationToken token = null;
                ShareResultSegment    shareResultSegment = await fileClient.ListSharesSegmentedAsync("Pat", token);

                foreach (CloudFileShare share in shareResultSegment.Results)
                {
                    CloudFileDirectory rootDir   = share.GetRootDirectoryReference();
                    CloudFileDirectory sampleDir = rootDir.GetDirectoryReference(DateTime.Now.ToString("yyyyMMdd"));
                    if (await sampleDir.ExistsAsync())                            //Console.WriteLine(cloudFile.Uri.ToString()+'\n');
                    {
                        do
                        {
                            FileResultSegment resultSegment = await sampleDir.ListFilesAndDirectoriesSegmentedAsync(token);

                            token = resultSegment.ContinuationToken;

                            List <IListFileItem> listedFileItems = new List <IListFileItem>();

                            foreach (IListFileItem listResultItem in resultSegment.Results)
                            {
                                CloudFile cloudFile = sampleDir.GetFileReference(listResultItem.Uri.ToString());
                                cloudFiles.Add(cloudFile);
                            }
                        }while (token != null);
                    }
                }

                return(cloudFiles);
            } while (true);
        }
Esempio n. 13
0
        public override async Task <IEnumerable <T> > ListContainedItemsAsync <T>(string filter, int maxResults, CancellationToken cancellationToken, TimeSpan timeout)
        {
            DateTime             start  = DateTime.UtcNow;
            DateTime             end    = start.Add(timeout);
            List <IListFileItem> result = new List <IListFileItem>();
            CloudFileDirectory   d      = new CloudFileDirectory(URI, StorageAccount.Credentials);

            FileContinuationToken continuationToken = null;
            FileResultSegment     resultSegment     = null;

            do
            {
                resultSegment = await _dir.ListFilesAndDirectoriesSegmentedAsync(filter, maxResults, continuationToken, null, null, cancellationToken);

                result.AddRange(resultSegment.Results);
                if (result.Count > maxResults)
                {
                    return(result.Take(maxResults) as IEnumerable <T>);
                }
                continuationToken = resultSegment.ContinuationToken;
            }while (continuationToken != null && !cancellationToken.IsCancellationRequested && DateTime.UtcNow < end);
            return(result as IEnumerable <T>);
        }
Esempio n. 14
0
        /// <summary>
        /// Basic operations to work with Azure Files
        /// </summary>
        /// <returns>Task</returns>
        private static async Task BasicAzureFileOperationsAsync()
        {
            const string DemoShare     = "demofileshare";
            const string DemoDirectory = "demofiledirectory";
            const string ImageToUpload = "HelloWorld.png";

            // Retrieve storage account information from connection string
            // How to create a storage connection string - http://msdn.microsoft.com/en-us/library/azure/ee758697.aspx
            CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            // Create a file client for interacting with the file service.
            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();

            // Create a share for organizing files and directories within the storage account.
            Console.WriteLine("1. Creating file share");
            CloudFileShare share = fileClient.GetShareReference(DemoShare);

            try
            {
                await share.CreateIfNotExistsAsync();
            }
            catch (StorageException)
            {
                Console.WriteLine("Please make sure your storage account has storage file endpoint enabled and specified correctly in the app.config - then restart the sample.");
                Console.WriteLine("Press any key to exit");
                Console.ReadLine();
                throw;
            }

            // Get a reference to the root directory of the share.
            CloudFileDirectory root = share.GetRootDirectoryReference();

            // Create a directory under the root directory
            Console.WriteLine("2. Creating a directory under the root directory");
            CloudFileDirectory dir = root.GetDirectoryReference(DemoDirectory);
            await dir.CreateIfNotExistsAsync();

            // Uploading a local file to the directory created above
            Console.WriteLine("3. Uploading a file to directory");
            CloudFile file = dir.GetFileReference(ImageToUpload);
            await file.UploadFromFileAsync(ImageToUpload);

            // List all files/directories under the root directory
            Console.WriteLine("4. List Files/Directories in root directory");
            List <IListFileItem>  results = new List <IListFileItem>();
            FileContinuationToken token   = null;

            do
            {
                FileResultSegment resultSegment = await share.GetRootDirectoryReference().ListFilesAndDirectoriesSegmentedAsync(token);

                results.AddRange(resultSegment.Results);
                token = resultSegment.ContinuationToken;
            }while (token != null);

            // Print all files/directories listed above
            foreach (IListFileItem listItem in results)
            {
                // listItem type will be CloudFile or CloudFileDirectory
                Console.WriteLine("- {0} (type: {1})", listItem.Uri, listItem.GetType());
            }

            // Download the uploaded file to your file system
            Console.WriteLine("5. Download file from {0}", file.Uri.AbsoluteUri);
            await file.DownloadToFileAsync(string.Format("./CopyOf{0}", ImageToUpload), FileMode.Create);

            // Clean up after the demo
            Console.WriteLine("6. Delete file");
            await file.DeleteAsync();

            // When you delete a share it could take several seconds before you can recreate a share with the same
            // name - hence to enable you to run the demo in quick succession the share is not deleted. If you want
            // to delete the share uncomment the line of code below.
            // Console.WriteLine("7. Delete Share");
            // await share.DeleteAsync();
        }
        private async Task <IEnumerable <string> > ListFilesOrDirectoriesAsync(string folderPath, bool isDirectory)
        {
            if (!folderPath.StartsWith("/"))
            {
                throw new ArgumentException("First character on folderPath must be / (root).", nameof(folderPath));
            }
            string[] filePathSplitted = folderPath.Split("/");

            if (filePathSplitted.Length < 2)
            {
                throw new ArgumentException("FolderPath correct format is \"/{folder/s}\".", nameof(folderPath));
            }

            // Get a reference to the file share we created previously.
            CloudFileShare share = fileClient.GetShareReference(filePathSplitted[1]);

            // Ensure that the share exists.
            if (true || await share.ExistsAsync().ConfigureAwait(false)) //Obviamos esta comprobación porque puede que no se tenga privilegios suficientes
            {
                // Get a reference to the root directory for the share.
                CloudFileDirectory selDir = share.GetRootDirectoryReference();
                if (!selDir.Exists())
                {
                    throw new Exception("Incorrect route path.");
                }
                // Get a reference to the directory we created previously.
                if (filePathSplitted.Length > 2)
                {
                    CloudFileDirectory tempDir = selDir.GetDirectoryReference(filePathSplitted[2]);
                    if (!tempDir.Exists())
                    {
                        throw new Exception("Incorrect route path.");
                    }
                    for (int i = 3; i < filePathSplitted.Length; i++)
                    {
                        tempDir = tempDir.GetDirectoryReference(filePathSplitted[i]);
                        if (!tempDir.Exists())
                        {
                            throw new Exception("Incorrect route path.");
                        }
                    }
                    selDir = tempDir;
                }

                List <IListFileItem>  results = new List <IListFileItem>();
                FileContinuationToken token   = null;
                do
                {
                    FileResultSegment resultSegment = await selDir.ListFilesAndDirectoriesSegmentedAsync(token);

                    results.AddRange(resultSegment.Results);
                    token = resultSegment.ContinuationToken;
                }while (token != null);
                if (isDirectory)
                {
                    return(results.Where(lfi => lfi is CloudFileDirectory).Select(lfi => ((CloudFileDirectory)lfi).Name));
                }
                else
                {
                    return(results.Where(lfi => lfi is CloudFile).Select(lfi => ((CloudFile)lfi).Name));
                }
            }
            else
            {
                throw new Exception("Share not found.");
            }
        }
Esempio n. 16
0
        private IEnumerable <TransferEntry> EnumerateLocationRecursive(CancellationToken cancellationToken)
        {
            string fullPrefix = Uri.UnescapeDataString(this.location.FileDirectory.SnapshotQualifiedUri.AbsolutePath);

            // Normalize full prefix to end with slash.
            if (!string.IsNullOrEmpty(fullPrefix) && !fullPrefix.EndsWith("/", StringComparison.OrdinalIgnoreCase))
            {
                fullPrefix += '/';
            }

            Stack <CloudFileDirectory> directoriesToList = new Stack <CloudFileDirectory>();

            directoriesToList.Push(this.location.FileDirectory);

            string[] pathSegList             = null;
            bool     passedContinuationToken = false;
            int      pathSegListIndex        = 0;

            if (null != this.listContinuationToken)
            {
                pathSegList = this.listContinuationToken.FilePath.Split(new char[] { UriDelimiter });
            }
            else
            {
                passedContinuationToken = true;
            }

            while (0 != directoriesToList.Count)
            {
                CloudFileDirectory directory       = directoriesToList.Pop();
                string             dirAbsolutePath = Uri.UnescapeDataString(directory.SnapshotQualifiedUri.AbsolutePath);
                if (dirAbsolutePath[dirAbsolutePath.Length - 1] != UriDelimiter)
                {
                    dirAbsolutePath = dirAbsolutePath + UriDelimiter;
                }

                Stack <CloudFileDirectory> innerDirList = new Stack <CloudFileDirectory>();

                FileContinuationToken continuationToken = null;

                // To check whether reached continuation token by dir or file in this round.
                bool   checkFile            = false;
                bool   passedSubFolder      = false;
                string continuationTokenSeg = null;
                if (!passedContinuationToken)
                {
                    if (pathSegList.Length - 1 == pathSegListIndex)
                    {
                        checkFile = true;
                    }

                    continuationTokenSeg = pathSegList[pathSegListIndex];
                    pathSegListIndex++;
                }

                do
                {
                    FileResultSegment resultSegment = null;
                    Utils.CheckCancellation(cancellationToken);

                    ErrorEntry errorEntry = null;

                    try
                    {
                        FileRequestOptions requestOptions = Transfer_RequestOptions.DefaultFileRequestOptions;
                        resultSegment = directory.ListFilesAndDirectoriesSegmentedAsync(
                            ListFilesSegmentSize,
                            continuationToken,
                            requestOptions,
                            null,
                            cancellationToken).Result;
                    }
                    catch (Exception ex)
                    {
                        string errorMessage = string.Format(
                            CultureInfo.CurrentCulture,
                            Resources.FailedToEnumerateDirectory,
                            this.location.FileDirectory.SnapshotQualifiedUri.AbsoluteUri,
                            string.Empty);

                        TransferException exception =
                            new TransferException(TransferErrorCode.FailToEnumerateDirectory, errorMessage, ex);
                        errorEntry = new ErrorEntry(exception);
                    }

                    if (null != errorEntry)
                    {
                        yield return(errorEntry);

                        yield break;
                    }

                    continuationToken = resultSegment.ContinuationToken;

                    foreach (IListFileItem fileItem in resultSegment.Results)
                    {
                        Utils.CheckCancellation(cancellationToken);

                        if (fileItem is CloudFileDirectory)
                        {
                            if (checkFile || passedContinuationToken || passedSubFolder)
                            {
                                innerDirList.Push(fileItem as CloudFileDirectory);
                            }
                            else
                            {
                                CloudFileDirectory cloudDir = fileItem as CloudFileDirectory;
                                string             fullPath = Uri.UnescapeDataString(cloudDir.SnapshotQualifiedUri.AbsolutePath);
                                string             segName  = fullPath.Remove(0, dirAbsolutePath.Length);

                                int compareResult = string.Compare(segName, continuationTokenSeg, StringComparison.OrdinalIgnoreCase);

                                if (compareResult >= 0)
                                {
                                    passedSubFolder = true;
                                    innerDirList.Push(cloudDir);

                                    if (compareResult > 0)
                                    {
                                        passedContinuationToken = true;
                                    }
                                }
                            }
                        }
                        else if (fileItem is CloudFile)
                        {
                            if (!checkFile && !passedContinuationToken)
                            {
                                continue;
                            }

                            CloudFile cloudFile = fileItem as CloudFile;

                            string fullPath     = Uri.UnescapeDataString(cloudFile.SnapshotQualifiedUri.AbsolutePath);
                            string relativePath = fullPath.Remove(0, fullPrefix.Length);

                            if (passedContinuationToken)
                            {
                                yield return(new AzureFileEntry(
                                                 relativePath,
                                                 cloudFile,
                                                 new AzureFileListContinuationToken(relativePath)));
                            }
                            else
                            {
                                string segName       = fullPath.Remove(0, dirAbsolutePath.Length);
                                int    compareResult = string.Compare(segName, continuationTokenSeg, StringComparison.OrdinalIgnoreCase);

                                if (compareResult < 0)
                                {
                                    continue;
                                }

                                passedContinuationToken = true;

                                if (compareResult > 0)
                                {
                                    yield return(new AzureFileEntry(
                                                     relativePath,
                                                     cloudFile,
                                                     new AzureFileListContinuationToken(relativePath)));
                                }
                            }
                        }
                    }
                }while (continuationToken != null);

                if (checkFile)
                {
                    passedContinuationToken = true;
                }

                if (innerDirList.Count <= 0)
                {
                    if (!checkFile && !passedContinuationToken)
                    {
                        passedContinuationToken = true;
                    }
                }
                else
                {
                    while (innerDirList.Count > 0)
                    {
                        directoriesToList.Push(innerDirList.Pop());
                    }
                }
            }
        }
Esempio n. 17
0
        private IEnumerable <TransferEntry> EnumerateLocationRecursive(CancellationToken cancellationToken)
        {
            string fullPrefix = null;

            if (null != this.baseDirectory)
            {
                fullPrefix = Uri.UnescapeDataString(this.baseDirectory.SnapshotQualifiedUri.AbsolutePath);
            }
            else
            {
                fullPrefix = Uri.UnescapeDataString(this.location.FileDirectory.SnapshotQualifiedUri.AbsolutePath);
            }

            // Normalize full prefix to end with slash.
            if (!string.IsNullOrEmpty(fullPrefix) && !fullPrefix.EndsWith("/", StringComparison.OrdinalIgnoreCase))
            {
                fullPrefix += '/';
            }

            CloudFileDirectory directory = this.location.FileDirectory;

            Stack <CloudFileDirectory> innerDirList = new Stack <CloudFileDirectory>();

            FileContinuationToken continuationToken = null;
            bool passedContinuationToken            = false;

            if (null == this.listContinuationToken)
            {
                passedContinuationToken = true;
            }

            do
            {
                FileResultSegment resultSegment = null;
                Utils.CheckCancellation(cancellationToken);

                ErrorEntry errorEntry = null;

                try
                {
                    FileRequestOptions requestOptions = Transfer_RequestOptions.DefaultFileRequestOptions;
                    resultSegment = directory.ListFilesAndDirectoriesSegmentedAsync(
                        ListFilesSegmentSize,
                        continuationToken,
                        requestOptions,
                        null,
                        cancellationToken).Result;
                }
                catch (Exception ex)
                {
                    string errorMessage = string.Format(
                        CultureInfo.CurrentCulture,
                        Resources.FailedToEnumerateDirectory,
                        directory.SnapshotQualifiedUri.AbsoluteUri,
                        string.Empty);

                    TransferException exception =
                        new TransferException(TransferErrorCode.FailToEnumerateDirectory, errorMessage, ex);
                    errorEntry = new ErrorEntry(exception);
                }

                if (null != errorEntry)
                {
                    yield return(errorEntry);

                    yield break;
                }

                continuationToken = resultSegment.ContinuationToken;

                foreach (IListFileItem fileItem in resultSegment.Results)
                {
                    Utils.CheckCancellation(cancellationToken);

                    if (fileItem is CloudFileDirectory)
                    {
                        CloudFileDirectory cloudDir = fileItem as CloudFileDirectory;

                        if (!passedContinuationToken)
                        {
                            if (string.Equals(cloudDir.Name, this.listContinuationToken.FilePath, StringComparison.Ordinal))
                            {
                                passedContinuationToken = true;
                                continue;
                            }
                            else
                            {
                                continue;
                            }
                        }
                        string fullPath     = Uri.UnescapeDataString(cloudDir.SnapshotQualifiedUri.AbsolutePath);
                        string relativePath = fullPath.Remove(0, fullPrefix.Length);

                        yield return(new AzureFileDirectoryEntry(
                                         relativePath,
                                         cloudDir,
                                         new AzureFileListContinuationToken(cloudDir.Name)));
                    }
                    else if (fileItem is CloudFile)
                    {
                        CloudFile cloudFile = fileItem as CloudFile;

                        if (!passedContinuationToken)
                        {
                            if (string.Equals(cloudFile.Name, this.listContinuationToken.FilePath, StringComparison.Ordinal))
                            {
                                passedContinuationToken = true;
                                continue;
                            }
                            else
                            {
                                continue;
                            }
                        }

                        string fullPath     = Uri.UnescapeDataString(cloudFile.SnapshotQualifiedUri.AbsolutePath);
                        string relativePath = fullPath.Remove(0, fullPrefix.Length);

                        yield return(new AzureFileEntry(
                                         relativePath,
                                         cloudFile,
                                         new AzureFileListContinuationToken(cloudFile.Name)));
                    }
                }
            }while (continuationToken != null);
        }
Esempio n. 18
0
    public async void FileStorageTest()
    {
        ClearOutput();
        WriteLine("-- Testing File Storage --");

        WriteLine("0. Creating file client");

        // Create a file client for interacting with the file service.
        CloudFileClient fileClient = StorageAccount.CreateCloudFileClient();

        // Create a share for organizing files and directories within the storage account.
        WriteLine("1. Creating file share");
        CloudFileShare share = fileClient.GetShareReference(DemoShare);

        try
        {
            await share.CreateIfNotExistsAsync();
        }
        catch (StorageException)
        {
            WriteLine("Please make sure your storage account has storage file endpoint enabled and specified correctly in the app.config - then restart the sample.");
            throw;
        }

        // Get a reference to the root directory of the share.
        CloudFileDirectory root = share.GetRootDirectoryReference();

        // Create a directory under the root directory
        WriteLine("2. Creating a directory under the root directory");
        CloudFileDirectory dir = root.GetDirectoryReference(DemoDirectory);
        await dir.CreateIfNotExistsAsync();

        // Uploading a local file to the directory created above
        WriteLine("3. Uploading a file to directory");
        CloudFile file = dir.GetFileReference(ImageToUpload);

#if WINDOWS_UWP && ENABLE_DOTNET
        StorageFolder storageFolder = await StorageFolder.GetFolderFromPathAsync(Application.streamingAssetsPath.Replace('/', '\\'));

        StorageFile sf = await storageFolder.GetFileAsync(ImageToUpload);

        await file.UploadFromFileAsync(sf);
#else
        await file.UploadFromFileAsync(Path.Combine(Application.streamingAssetsPath, ImageToUpload));
#endif

        // List all files/directories under the root directory
        WriteLine("4. List Files/Directories in root directory");
        List <IListFileItem>  results = new List <IListFileItem>();
        FileContinuationToken token   = null;
        do
        {
            FileResultSegment resultSegment = await share.GetRootDirectoryReference().ListFilesAndDirectoriesSegmentedAsync(token);

            results.AddRange(resultSegment.Results);
            token = resultSegment.ContinuationToken;
        }while (token != null);

        // Print all files/directories listed above
        foreach (IListFileItem listItem in results)
        {
            // listItem type will be CloudFile or CloudFileDirectory
            WriteLine(string.Format("- {0} (type: {1})", listItem.Uri, listItem.GetType()));
        }

        // Download the uploaded file to your file system
        string path;
        WriteLine(string.Format("5. Download file from {0}", file.Uri.AbsoluteUri));
        string fileName = string.Format("CopyOf{0}", ImageToUpload);

#if WINDOWS_UWP && ENABLE_DOTNET
        storageFolder = ApplicationData.Current.TemporaryFolder;
        sf            = await storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

        path = sf.Path;
        await file.DownloadToFileAsync(sf);
#else
        path = Path.Combine(Application.temporaryCachePath, fileName);
        await file.DownloadToFileAsync(path, FileMode.Create);
#endif

        WriteLine("File written to " + path);

        // Clean up after the demo
        WriteLine("6. Delete file");
        await file.DeleteAsync();

        // When you delete a share it could take several seconds before you can recreate a share with the same
        // name - hence to enable you to run the demo in quick succession the share is not deleted. If you want
        // to delete the share uncomment the line of code below.
        WriteLine("7. Delete Share -- Note that it will take a few seconds before you can recreate a share with the same name");
        await share.DeleteAsync();

        WriteLine("-- Test Complete --");
    }
Esempio n. 19
0
        private static async Task mainAsync(string[] args)
        {
            try
            {
                var builder = new ConfigurationBuilder()
                              .SetBasePath(Directory.GetCurrentDirectory())
                              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

                IConfigurationRoot configuration = builder.Build();
                var allCitDebtsLines             = new string[10000000];
                var allSettlementsLines          = new string[10000000];
                var allPaymentLines = new string[10000000];
                while (true)
                {
                    if (DateTime.Now.AddHours(3).ToShortTimeString() == "12:00 PM")
                    {
                        List <string>       fileNames         = new List <string>();
                        List <string[]>     lstCloudFilesdata = new List <string[]>();
                        CloudStorageAccount storageAccount    = CloudStorageAccount.Parse($"{configuration["ConnectionString1"]}");
                        CloudFileClient     fileClient        = storageAccount.CreateCloudFileClient();
                        CloudFileShare      fileShare         = fileClient.GetShareReference("import");
                        //looks for a file share in the cloud
                        bool fileShareExists = await fileShare.ExistsAsync();

                        if (fileShareExists)
                        {
                            List <CloudFile>   lstCloudFiles = new List <CloudFile>();
                            CloudFileDirectory rootDir       = fileShare.GetRootDirectoryReference();
                            //for each file in my fileshare
                            FileContinuationToken token = null;
                            FileResultSegment     k     = await rootDir.ListFilesAndDirectoriesSegmentedAsync(token);

                            token = k.ContinuationToken;

                            //var context_ = new Db.Data.();
                            List <string> sl = new List <string>();

                            foreach (IListFileItem fiile in k.Results)
                            {
                                //if the file exists
                                CloudFile file = (CloudFile)fiile;
                                bool      asd  = await file.ExistsAsync();

                                if (asd)
                                {
                                    //adds new datasting array
                                    sl = await ReadDataAsync(lstCloudFilesdata, file, fileNames);
                                }

                                foreach (string y in sl)
                                {
                                    Console.WriteLine("From list new : " + y);
                                }
                                ;

                                IEnumerable <CitizenDepts> o = from eachLine in (
                                    from inner in sl
                                    select inner.Split(';')
                                    )
                                                               select new CitizenDepts
                                {
                                    VAT              = eachLine[0],
                                    FirstName        = eachLine[1],
                                    LastName         = eachLine[2],
                                    Email            = eachLine[3],
                                    Phone            = eachLine[4],
                                    Address          = eachLine[5],
                                    County           = eachLine[6],
                                    BillId           = eachLine[7],
                                    Bill_description = eachLine[8],
                                    Amount           = Decimal.Parse(eachLine[9]),
                                    DueDate          = DateTime.ParseExact(eachLine[10],
                                                                           "yyyyMMdd", CultureInfo.InvariantCulture)
                                };
                                foreach (var p in o)
                                {
                                    Console.WriteLine(p.FirstName + " - " + p.BillId + ", - " + p.DueDate);
                                }
                                ;



                                //string s = context_.Database.ProviderName;

                                // Console.WriteLine(s);
                                /// var all = from c in context_.CitizenDepts select c;
                                //context_.CitizenDepts.RemoveRange(all);
                                /// context_.SaveChanges();

                                foreach (var p in o)
                                {
                                    //Add Student object into Students DBset
                                    //if (p.VAT!=null)
                                    //context_.Add(p);
                                }
                                //// call SaveChanges method to save student into database
                                //context_.SaveChanges();
                            }
                        }
                        if (lstCloudFilesdata != null && fileNames != null)
                        {
                            ProccessData(lstCloudFilesdata, fileNames);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Enumerates a specified cloud file directory and returns items based item type and searchPattern.
        /// </summary>
        /// <param name="cloudFileDirectory">Cloud file directory to enumerate on</param>
        /// <param name="fileType">Item type to filter with</param>
        /// <param name="searchPattern">Search pattern to filter with</param>
        /// <returns>Enumerable of strings which contains all found names based on file type</returns>
        public static IEnumerable <string> EnumerateDirectory(this CloudFileDirectory cloudFileDirectory, EFileType fileType, string searchPattern)
        {
            #region validation

            if (cloudFileDirectory == null)
            {
                throw new ArgumentNullException(nameof(cloudFileDirectory));
            }

            if (string.IsNullOrEmpty(searchPattern))
            {
                throw new ArgumentNullException(nameof(searchPattern));
            }

            if (!TaskUtilities.ExecuteSync(cloudFileDirectory.ExistsAsync()))
            {
                return(new List <string>());
            }

            #endregion

            var directoryNames = new List <string>();

            var fileContinuationToken = new FileContinuationToken();

            do
            {
                FileResultSegment fileResultSegment = TaskUtilities.ExecuteSync(cloudFileDirectory.ListFilesAndDirectoriesSegmentedAsync(fileContinuationToken));

                foreach (IListFileItem listFileItem in fileResultSegment.Results)
                {
                    string fullListItemPath = string.Empty;

                    switch (fileType)
                    {
                    case EFileType.Files:
                        if (listFileItem is CloudFile cloudFile)
                        {
                            fullListItemPath = cloudFile.StorageUri.PrimaryUri.ToString();
                        }

                        break;

                    case EFileType.Directories:
                        if (listFileItem is CloudFileDirectory pendingCloudFileDirectory)
                        {
                            fullListItemPath = pendingCloudFileDirectory.StorageUri.PrimaryUri.ToString();

                            if (fullListItemPath.EndsWith('/'))
                            {
                                fullListItemPath = fullListItemPath.Remove(fullListItemPath.LastIndexOf('/'));
                            }
                        }

                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(fileType), fileType, null);
                    }

                    // replace wildcard for 'multiple letters' with regex-wildcard
                    string regexableSearchPattern = searchPattern.Replace("*", ".*");

                    // replace wildcard for 'single letter' with regex-wildcard
                    regexableSearchPattern = regexableSearchPattern.Replace("?", ".?");

                    // set search pattern in 'begin-to-end'-symbols
                    regexableSearchPattern = $"^{regexableSearchPattern}$";

                    var rgxFileName = new Regex(regexableSearchPattern);

                    if (!string.IsNullOrEmpty(fullListItemPath) && rgxFileName.IsMatch(fullListItemPath))
                    {
                        directoryNames.Add(fullListItemPath);
                    }
                }

                fileContinuationToken = fileResultSegment.ContinuationToken;
            } while (fileContinuationToken != null);

            return(directoryNames);
        }
        private async Task <IEnumerable <TListFileItem> > ListFileItems <TListFileItem>(
            string[] directoryPath,
            CancellationToken cancellationToken)
            where TListFileItem : IListFileItem
        {
            IEnumerable <TListFileItem> toReturn = null;

            if (directoryPath == null)
            {
                throw new ArgumentNullException(nameof(directoryPath));
            }

            this.loggerWrapper.Debug(
                $"Getting root directory reference for " +
                $"\"{this.sourceCloudFileShare.Name}\"...");

            CloudFileDirectory shareRoot =
                this.sourceCloudFileShare.GetRootDirectoryReference();

            CloudFileDirectory innerDir = shareRoot;

            foreach (string directory in directoryPath)
            {
                this.loggerWrapper.Debug(
                    $"Getting reference to directory \"{directory}\"...");

                innerDir = innerDir.GetDirectoryReference(directory);
            }

            this.loggerWrapper.Debug(
                "Beginning listing of files/directories...");

            List <TListFileItem> listFileItems = new List <TListFileItem>();

            IEnumerable <IListFileItem> results               = null;
            IEnumerable <TListFileItem> castedResults         = null;
            FileContinuationToken       fileContinuationToken = null;

            do
            {
                FileResultSegment fileResultSegment =
                    await innerDir.ListFilesAndDirectoriesSegmentedAsync(
                        null,
                        fileContinuationToken,
                        this.fileRequestOptions,
                        this.operationContext,
                        cancellationToken)
                    .ConfigureAwait(false);

                results = fileResultSegment.Results;

                this.loggerWrapper.Debug(
                    $"{results.Count()} result(s) returned. Filtering to " +
                    $"directories...");

                castedResults = results
                                .Where(x => x is TListFileItem)
                                .Cast <TListFileItem>();

                this.loggerWrapper.Debug(
                    $"Adding {results.Count()} filtered results to the " +
                    $"overall results list...");

                listFileItems.AddRange(castedResults);

                this.loggerWrapper.Info(
                    $"Total filtered results so far: " +
                    $"{listFileItems.Count}.");

                fileContinuationToken = fileResultSegment.ContinuationToken;

                if (fileContinuationToken != null)
                {
                    this.loggerWrapper.Debug(
                        $"{nameof(FileContinuationToken)} present. Looping " +
                        $"round again...");
                }
            }while (fileContinuationToken != null);

            toReturn = listFileItems.ToList();

            return(toReturn);
        }
Esempio n. 22
0
        private async Task BasicAzureFileOperationsAsync()
        {
            const string DemoShare     = "demofileshare";
            const string DemoDirectory = "demofiledirectory";
            const string ImageToUpload = "HelloWorld.png";

            CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(AppConfig.ConnectionString);

            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
            CloudFileShare  share      = fileClient.GetShareReference(DemoShare);

            try
            {
                await share.CreateIfNotExistsAsync();
            }
            catch (StorageException)
            {
                Debug.WriteLine("Please make sure your storage account has storage file endpoint enabled and specified correctly in the app.config - then restart the sample.");
            }

            CloudFileDirectory root = share.GetRootDirectoryReference();

            Debug.WriteLine("2. Creating a directory under the root directory");
            CloudFileDirectory dir = root.GetDirectoryReference(DemoDirectory);
            await dir.CreateIfNotExistsAsync();

            StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
            var           realFile      = await storageFolder.CreateFileAsync(ImageToUpload, Windows.Storage.CreationCollisionOption.ReplaceExisting);

            Debug.WriteLine("3. Uploading a file to directory");
            CloudFile file = dir.GetFileReference(ImageToUpload);

            await file.UploadFromFileAsync(realFile);


            // List all files/directories under the root directory
            Debug.WriteLine("4. List Files/Directories in root directory");
            List <IListFileItem>  results = new List <IListFileItem>();
            FileContinuationToken token   = null;

            do
            {
                FileResultSegment resultSegment = await share.GetRootDirectoryReference().ListFilesAndDirectoriesSegmentedAsync(token);

                results.AddRange(resultSegment.Results);
                token = resultSegment.ContinuationToken;
            }while (token != null);

            // Print all files/directories listed above
            foreach (IListFileItem listItem in results)
            {
                // listItem type will be CloudFile or CloudFileDirectory
                Debug.WriteLine("- {0} (type: {1})", listItem.Uri, listItem.GetType());
            }

            // Download the uploaded file to your file system
            Debug.WriteLine("5. Download file from {0}", file.Uri.AbsoluteUri);
            var newFile = await storageFolder.CreateFileAsync(string.Format("./CopyOf{0}", ImageToUpload), Windows.Storage.CreationCollisionOption.ReplaceExisting);

            await file.DownloadToFileAsync(newFile);

            // Clean up after the demo
            Debug.WriteLine("6. Delete file");
            await file.DeleteAsync();

            // When you delete a share it could take several seconds before you can recreate a share with the same
            // name - hence to enable you to run the demo in quick succession the share is not deleted. If you want
            // to delete the share uncomment the line of code below.
            // Console.WriteLine("7. Delete Share");
            // await share.DeleteAsync();
        }