コード例 #1
0
        /// <summary>Lists the drives, directories and files of the file system path.</summary>
        /// <remarks>If an exception is thrown during the tries then the file system navigation is redirected to the parent directory.</remarks>
        private void ListFileSystemItems()
        {
            /*
             * Remove all columns.
             */

            GridView fileSystemGridView = (GridView)this.fileSystemListView.View;

            fileSystemGridView.Columns.Clear();

            fileSystemGridView.Columns.Add(this.nameGridViewColumn);

            /*
             * Remove all items.
             */

            this.fileSystemListViewItems.Clear();

            /*
             * Add relevant columns and items.
             */

            if (this.path.Length == 0)
            {
                if (this.browserSettings.HasVolumeLabel)
                {
                    fileSystemGridView.Columns.Add(this.volumeLabelGridViewColumn);
                }

                if (this.browserSettings.HasRootDirectory)
                {
                    fileSystemGridView.Columns.Add(this.rootDirectoryGridViewColumn);
                }

                if (this.browserSettings.HasDriveType)
                {
                    fileSystemGridView.Columns.Add(this.driveTypeGridViewColumn);
                }

                if (this.browserSettings.HasDriveFormat)
                {
                    fileSystemGridView.Columns.Add(this.driveFormatGridViewColumn);
                }

                if (this.browserSettings.HasAvailableFreeSpace)
                {
                    fileSystemGridView.Columns.Add(this.availableFreeSpaceGridViewColumn);
                }

                if (this.browserSettings.HasTotalFreeSpace)
                {
                    fileSystemGridView.Columns.Add(this.totalFreeSpaceGridViewColumn);
                }

                if (this.browserSettings.HasTotalSize)
                {
                    fileSystemGridView.Columns.Add(this.totalSizeGridViewColumn);
                }

                foreach (DriveInfo currentDriveInfo in DriveInfo.GetDrives())
                {
                    FileSystemItem currentFileSystemItem = new FileSystemItem()
                    {
                        ByteMultiple = this.browserSettings.ByteMultiple
                    };

                    currentFileSystemItem.Name = currentDriveInfo.Name;

                    if (this.browserSettings.HasVolumeLabel)
                    {
                        try
                        {
                            currentFileSystemItem.VolumeLabel = currentDriveInfo.VolumeLabel;
                        }
                        catch
                        {
                        }
                    }

                    if (this.browserSettings.HasRootDirectory)
                    {
                        DirectoryInfo currentDirectoryInfo = currentDriveInfo.RootDirectory;

                        currentFileSystemItem.RootDirectory = currentDirectoryInfo.Name;
                    }

                    if (this.browserSettings.HasDriveType)
                    {
                        switch (currentDriveInfo.DriveType)
                        {
                        case DriveType.CDRom:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.CDRom;

                            break;

                        case DriveType.Fixed:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.Fixed;

                            break;

                        case DriveType.Network:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.Network;

                            break;

                        case DriveType.NoRootDirectory:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.NoRootDirectory;

                            break;

                        case DriveType.Ram:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.Ram;

                            break;

                        case DriveType.Removable:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.Removable;

                            break;

                        case DriveType.Unknown:
                            currentFileSystemItem.DriveType = UserControls.Resources.DriveTypeEnumerations.Unknown;

                            break;

                        default:
                            currentFileSystemItem.DriveType = currentDriveInfo.DriveType.ToString();

                            break;
                        }
                    }

                    if (this.browserSettings.HasDriveFormat)
                    {
                        try
                        {
                            currentFileSystemItem.DriveFormat = currentDriveInfo.DriveFormat;
                        }
                        catch
                        {
                        }
                    }

                    if (this.browserSettings.HasAvailableFreeSpace)
                    {
                        try
                        {
                            currentFileSystemItem.AvailableFreeSpaceLong = currentDriveInfo.AvailableFreeSpace;
                        }
                        catch
                        {
                        }
                    }

                    if (this.browserSettings.HasTotalFreeSpace)
                    {
                        try
                        {
                            currentFileSystemItem.TotalFreeSpaceLong = currentDriveInfo.TotalFreeSpace;
                        }
                        catch
                        {
                        }
                    }

                    if (this.browserSettings.HasTotalSize)
                    {
                        try
                        {
                            currentFileSystemItem.TotalSizeLong = currentDriveInfo.TotalSize;
                        }
                        catch
                        {
                        }
                    }

                    this.fileSystemListViewItems.Add(currentFileSystemItem);
                }
            }
            else
            {
                fileSystemGridView.Columns.Add(this.sizeGridViewColumn);
                fileSystemGridView.Columns.Add(this.lastAccessTimeGridViewColumn);
                fileSystemGridView.Columns.Add(this.lastWriteTimeGridViewColumn);
                fileSystemGridView.Columns.Add(this.creationTimeGridViewColumn);

                DirectoryInfo listingDirectoryInfo = new DirectoryInfo(this.path);

                try
                {
                    foreach (DirectoryInfo currentDirectoryInfo in listingDirectoryInfo.GetDirectories())
                    {
                        this.fileSystemListViewItems.Add(new FileSystemItem()
                        {
                            ByteMultiple = this.browserSettings.ByteMultiple, FileSystemItemType = FileSystemItemType.Directory, Name = currentDirectoryInfo.Name, Accessed = currentDirectoryInfo.LastAccessTime, Written = currentDirectoryInfo.LastWriteTime, Created = currentDirectoryInfo.CreationTime
                        });
                    }
                }
                catch (DirectoryNotFoundException)
                {
                    if (!this.isInitialNavigation)
                    {
                        this.isInitialNavigation = true;

                        this.NavigateFileSystem(string.Empty);

                        return;
                    }
                    else
                    {
                        ErrorWindow exceptionErrorWindow = new ErrorWindow(this, this.path, UserControls.Resources.Exceptions.DirectoryNotFoundMessage);

                        exceptionErrorWindow.ShowDialog();

                        this.NavigateFileSystem(PathManipulator.GetParentDirectory(this.path));
                    }

                    return;
                }
                catch (SecurityException)
                {
                    if (!this.isInitialNavigation)
                    {
                        this.isInitialNavigation = true;

                        this.NavigateFileSystem(string.Empty);

                        return;
                    }
                    else
                    {
                        ErrorWindow exceptionErrorWindow = new ErrorWindow(this, this.path, UserControls.Resources.Exceptions.SecurityMessage);

                        exceptionErrorWindow.ShowDialog();

                        this.NavigateFileSystem(PathManipulator.GetParentDirectory(this.path));
                    }

                    return;
                }
                catch (UnauthorizedAccessException)
                {
                    if (!this.isInitialNavigation)
                    {
                        this.isInitialNavigation = true;

                        this.NavigateFileSystem(string.Empty);

                        return;
                    }
                    else
                    {
                        ErrorWindow exceptionErrorWindow = new ErrorWindow(this, this.path, UserControls.Resources.Exceptions.UnauthorizedAccessMessage);

                        exceptionErrorWindow.ShowDialog();

                        this.NavigateFileSystem(PathManipulator.GetParentDirectory(this.path));
                    }

                    return;
                }

                try
                {
                    foreach (FileInfo currentFileInfo in listingDirectoryInfo.GetFiles())
                    {
                        if (this.browserFilter.Process(currentFileInfo))
                        {
                            this.fileSystemListViewItems.Add(new FileSystemItem()
                            {
                                ByteMultiple = this.browserSettings.ByteMultiple, FileSystemItemType = FileSystemItemType.File, Name = currentFileInfo.Name, Length = currentFileInfo.Length, Accessed = currentFileInfo.LastAccessTime, Written = currentFileInfo.LastWriteTime, Created = currentFileInfo.CreationTime
                            });
                        }
                    }
                }
                catch (DirectoryNotFoundException)
                {
                    if (!this.isInitialNavigation)
                    {
                        this.isInitialNavigation = true;

                        this.NavigateFileSystem(string.Empty);

                        return;
                    }
                    else
                    {
                        ErrorWindow exceptionErrorWindow = new ErrorWindow(this, this.path, UserControls.Resources.Exceptions.DirectoryNotFoundMessage);

                        exceptionErrorWindow.ShowDialog();

                        this.NavigateFileSystem(PathManipulator.GetParentDirectory(this.path));
                    }

                    return;
                }
            }

            /*
             * Resize the columns to fit the data.
             */

            foreach (GridViewColumn column in fileSystemGridView.Columns)
            {
                if (double.IsNaN(column.Width))
                {
                    column.Width = column.ActualWidth;
                }

                column.Width = double.NaN;
            }

            /*
             * Scroll to the top of the list view.
             */

            if (this.fileSystemListView.HasItems)
            {
                this.fileSystemListView.ScrollIntoView(this.fileSystemListView.Items[0]);
            }
        }
コード例 #2
0
        /// <summary>Initialises a new instance of the <see cref="FileSystemBrowserWindow"/> class.</summary>
        /// <param name="browserFilter">The file filter for the browser.</param>
        /// <param name="browserSettings">The settings for the browser.</param>
        public FileSystemBrowserWindow(BrowserFilter browserFilter, BrowserSettings browserSettings)
        {
            this.browserFilter   = browserFilter;
            this.browserSettings = browserSettings;

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

            if (this.browserSettings.MinimumFiles > this.browserSettings.MaximumFiles)
            {
                throw new MinimumGreaterThanMaximumException("The minimum number of files is greater than the maximum number of files.");
            }

            if (this.browserSettings.MinimumDirectories > this.browserSettings.MaximumDirectories)
            {
                throw new MinimumGreaterThanMaximumException("The minimum number of folders is greater than the maximum number of folders.");
            }

            InitializeComponent();
            fileSystemListView.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(onClick), true);
            fileSystemListViewItems        = new ObservableCollection <FileSystemItem>();
            CollectionView                 = CollectionViewSource.GetDefaultView(fileSystemListViewItems);
            fileSystemListView.ItemsSource = CollectionView;

            /*
             * Get grid view column references.
             */

            GridView fileSystemGridView = (GridView)fileSystemListView.View;

            nameGridViewColumn = fileSystemGridView.Columns[0];
            UpdateSortDescriptions("Name", ListSortDirection.Ascending);
            nameGridViewColumn.HeaderTemplate = (DataTemplate)Resources["HeaderTemplateArrowUp"];


            sizeGridViewColumn               = fileSystemGridView.Columns[1];
            lastAccessTimeGridViewColumn     = fileSystemGridView.Columns[2];
            lastWriteTimeGridViewColumn      = fileSystemGridView.Columns[3];
            creationTimeGridViewColumn       = fileSystemGridView.Columns[4];
            volumeLabelGridViewColumn        = fileSystemGridView.Columns[5];
            rootDirectoryGridViewColumn      = fileSystemGridView.Columns[6];
            driveTypeGridViewColumn          = fileSystemGridView.Columns[7];
            driveFormatGridViewColumn        = fileSystemGridView.Columns[8];
            availableFreeSpaceGridViewColumn = fileSystemGridView.Columns[9];
            totalFreeSpaceGridViewColumn     = fileSystemGridView.Columns[10];
            totalSizeGridViewColumn          = fileSystemGridView.Columns[11];

            /*
             * this.Title
             */

            switch (this.browserSettings.BrowsingMode)
            {
            case BrowsingMode.Open:
                if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories == 0)
                {
                    this.Title = Titles.OpenFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories == 0)
                {
                    this.Title = Titles.OpenFiles;
                }
                else if (this.browserSettings.MaximumFiles == 0 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.OpenFolder;
                }
                else if (this.browserSettings.MinimumFiles == 0 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.OpenFolders;
                }
                else if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.OpenFolderAndFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.OpenFolderAndFiles;
                }
                else if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.OpenFoldersAndFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.OpenFoldersAndFiles;
                }

                break;

            case BrowsingMode.Select:
                if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories == 0)
                {
                    this.Title = Titles.SelectFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories == 0)
                {
                    this.Title = Titles.SelectFiles;
                }
                else if (this.browserSettings.MaximumFiles == 0 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.SelectFolder;
                }
                else if (this.browserSettings.MinimumFiles == 0 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.SelectFolders;
                }
                else if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.SelectFolderAndFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories == 1)
                {
                    this.Title = Titles.SelectFolderAndFiles;
                }
                else if (this.browserSettings.MaximumFiles == 1 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.SelectFoldersAndFile;
                }
                else if (this.browserSettings.MaximumFiles > 1 && this.browserSettings.MaximumDirectories > 1)
                {
                    this.Title = Titles.SelectFoldersAndFiles;
                }

                break;
            }

            /*
             * this.navigationStackPanel
             */

            PathButton desktopNavigationButton   = new PathButton(NavigationButtons.Desktop, Environment.GetFolderPath(Environment.SpecialFolder.Desktop), new RoutedEventHandler(PathButton_Click));
            PathButton recentNavigationButton    = new PathButton(NavigationButtons.Recent, Environment.GetFolderPath(Environment.SpecialFolder.Recent), new RoutedEventHandler(PathButton_Click));
            PathButton documentsNavigationButton = new PathButton(NavigationButtons.Documents, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), new RoutedEventHandler(PathButton_Click));
            PathButton musicNavigationButton     = new PathButton(NavigationButtons.Music, Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), new RoutedEventHandler(PathButton_Click));
            PathButton picturesNavigationButton  = new PathButton(NavigationButtons.Pictures, Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), new RoutedEventHandler(PathButton_Click));
            PathButton videosNavigationButton    = new PathButton(NavigationButtons.Videos, Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), new RoutedEventHandler(PathButton_Click));

            navigationStackPanel.Children.Add(desktopNavigationButton);
            navigationStackPanel.Children.Add(recentNavigationButton);
            navigationStackPanel.Children.Add(documentsNavigationButton);
            navigationStackPanel.Children.Add(musicNavigationButton);
            navigationStackPanel.Children.Add(picturesNavigationButton);
            navigationStackPanel.Children.Add(videosNavigationButton);

            /*
             * this.actionButton, this.cancelButton
             */

            switch (this.browserSettings.BrowsingMode)
            {
            case BrowsingMode.Open:
                actionButton.Content = Buttons.Open;

                break;

            case BrowsingMode.Select:
                actionButton.Content = Buttons.Select;

                break;
            }

            cancelButton.Content = Buttons.Cancel;

            /*
             * this.NavigateFileSystem
             */

            path = PathManipulator.Sanitise(this.browserSettings.Path);

            NavigateFileSystem(path);
        }