1
c:\で始まるすべてのファイルとフォルダをツリーデータ構造に展開しようとしました。 実行ごとに、私はUnAuthorizedいくつかのdirecoriesのための例外を得た。 私が見つけた唯一の解決策は、try-catchを使用することですが、この場合、実行時間は約1分です。 フォルダへのアクセス権がない場合、別の解決方法がありますか?フォルダ名を取得しようとしたときに許可されていない例外
私もdirectoryName.Exsistsを使ってみました。これはうまくいきません。
私のコード:
private static void getAllFilesAndFoldersInPath(TreeView treeView, string path)
{
treeView.Items.Clear();
var stack = new Stack<TreeViewItem>();
var rootDirectory = new DirectoryInfo(path);
TreeViewItem node = new TreeViewItem();
node.Header = rootDirectory;
stack.Push(node);
while (stack.Count > 0)
{
var currentNode = stack.Pop();
var directoryInfo = (DirectoryInfo)currentNode.Header;
try
{
foreach (var directory in directoryInfo.GetDirectories())
{
if (!directory.Name.StartsWith("$"))
{
TreeViewItem childDirectoryNode = new TreeViewItem();
childDirectoryNode.Header = directory;
currentNode.Items.Add(childDirectoryNode);
stack.Push(childDirectoryNode);
}
}
foreach (var file in directoryInfo.GetFiles())
{
if (System.IO.Path.GetFileName(file.Name).StartsWith("~$") || System.IO.Path.GetExtension(file.Name) == ".tmp")
{
continue;
}
TreeViewItem tempNode = new TreeViewItem();
tempNode.Header = file;
currentNode.Items.Add(tempNode);
}
}
catch (UnauthorizedAccessException e) { }
}
treeView.Items.Add(node);
}
機能に渡したパスは、アプリケーションのユーザーに許可されていますか? –
あなたは許可されていないために例外がたくさん減速していると思っているようです。例外はありませんが、コストはそれほど高くありません。デバッガで実行すると非常に高価ですが、そうでなければ高価です。それが1分かかる理由は、システム内のすべてのファイルを調べるためです。ファイルマスクをgetfile呼び出しに渡すほうがよいでしょう – pm100