フォルダ参照ダイアログボックスを表示し、選択したフォルダにある
サブフォルダをリストに表示するプログラムです。
なぜか、マイ ドキュメントのフォルダを選択すると
サブフォルダのリストを表示するところ( GetDirectories )で
My Music フォルダへのアクセス権が無いとエラーが出ます。
ちなみに OS は Win8です。
下のプログラムではエラーが出た時点で処理を中止していますが
エラーをスキップしてリスト表示を続ける、簡単な方法はないものだろうか。
FolderBrowser.exe C# WinDesktop
Form1 に button1 と listBox1 を配置
Form1.cs
=====================================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FolderBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// FolderBrowserDialog の新しいインスタンスを生成する
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
// ダイアログの説明を設定する
folderBrowserDialog1.Description = "フォルダを選択";
// ルートになる特殊フォルダを設定する (初期値 SpecialFolder.Desktop)
// folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyDocuments;
// 初期選択するパスを設定する
// RootFolder以下にあるフォルダである必要がある
folderBrowserDialog1.SelectedPath =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// [新しいフォルダ] ボタンを表示する (初期値 true)
folderBrowserDialog1.ShowNewFolderButton = false;
// ダイアログを表示し、戻り値が [OK] の場合は、選択したディレクトリを表示する
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(folderBrowserDialog1.SelectedPath);
// 選択したフォルダ以下のサブフォルダをすべて取得する
// ワイルドカード"*"は、すべてのフォルダを意味する
try
{
string[] subFolders = System.IO.Directory.GetDirectories(
folderBrowserDialog1.SelectedPath, "*",
System.IO.SearchOption.AllDirectories);
// ListBox1をクリアにする
listBox1.Items.Clear();
listBox1.Items.AddRange(subFolders);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// 不要になった時点で破棄する
folderBrowserDialog1.Dispose();
}
}
}
=======================================================================
0 件のコメント:
コメントを投稿