Esempio n. 1
0
        /// <summary>
        /// Determines the filename of the file what will be used.
        /// </summary>
        /// <returns>The <see cref="StorageFile"/> of the file or <c>null</c> if no file was selected by the user.</returns>
        /// <remarks>
        /// If this method returns a valid <see cref="StorageFile"/> object, the <c>FileName</c> property will be filled
        /// with the safe filename. This can be used for display purposes only.
        /// </remarks>
        public virtual async Task <StorageFile[]> DetermineFileAsync()
        {
            var fileDialog = new global::Windows.Storage.Pickers.FileOpenPicker();

            var filters = Filter?.Split(';');

            if (filters != null)
            {
                foreach (var filter in filters)
                {
                    var finalFilter = filter;
                    if (finalFilter.StartsWith("*"))
                    {
                        finalFilter = finalFilter.Replace("*", string.Empty);
                    }

                    fileDialog.FileTypeFilter.Add(finalFilter);
                }
            }

            var files = new List <StorageFile>();

            if (IsMultiSelect)
            {
                var foundFiles = await fileDialog.PickMultipleFilesAsync();

                if (foundFiles != null)
                {
                    files.AddRange(foundFiles);
                }
            }
            else
            {
                var foundFile = await fileDialog.PickSingleFileAsync();

                if (foundFile != null)
                {
                    files.Add(foundFile);
                }
            }

            FileName  = (files.Count > 0) ? files[0].Path : null;
            FileNames = (files.Count > 0) ? files.Select(x => x.Path).ToArray() : null;

            return((files.Count > 0) ? files.ToArray() : null);
        }
Esempio n. 2
0
        /// <summary>
        /// Determines the filename of the file what will be used.
        /// </summary>
        /// <returns>The <see cref="StorageFile"/> of the file or <c>null</c> if no file was selected by the user.</returns>
        /// <remarks>
        /// If this method returns a valid <see cref="StorageFile"/> object, the <c>FileName</c> property will be filled
        /// with the safe filename. This can be used for display purposes only.
        /// </remarks>
        public virtual async Task <StorageFile[]> DetermineFileAsync()
        {
            var fileDialog = new global::Windows.Storage.Pickers.FileOpenPicker();

            var filters = Filter?.Split(';');

            if (filters != null)
            {
                foreach (var filter in filters)
                {
                    var fileFilter = filter;

                    // Support full .NET filters (like "Text files|*.txt") as well
                    if (fileFilter.Contains("|"))
                    {
                        var splittedFilters = fileFilter.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
                        if (splittedFilters.Length == 2)
                        {
                            fileFilter = splittedFilters[1];
                        }
                        else
                        {
                            Log.Warning($"Failed to parse filter '{fileFilter}'");

                            fileFilter = null;
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(fileFilter))
                    {
                        if (fileFilter.StartsWith("*"))
                        {
                            fileFilter = fileFilter.Replace("*", string.Empty);
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(fileFilter))
                    {
                        fileDialog.FileTypeFilter.Add(fileFilter);
                    }
                }
            }

            var files = new List <StorageFile>();

            if (IsMultiSelect)
            {
                var foundFiles = await fileDialog.PickMultipleFilesAsync();

                if (foundFiles != null)
                {
                    files.AddRange(foundFiles);
                }
            }
            else
            {
                var foundFile = await fileDialog.PickSingleFileAsync();

                if (foundFile != null)
                {
                    files.Add(foundFile);
                }
            }

            FileName  = (files.Count > 0) ? files[0].Path : null;
            FileNames = (files.Count > 0) ? files.Select(x => x.Path).ToArray() : null;

            return((files.Count > 0) ? files.ToArray() : null);
        }