前提・実現したいこと
Windows アプリケーション(使用言語はC#)で特殊ディレクトリの中身(ドキュメントやデスクトップなど)の一覧を取得してテキストファイルに出力したいです。
発生している問題・エラーメッセージ
ファイル一覧を取得する際に特定のファイルでアクセス拒否が発生します。
パス 'C:\Users\userName\Documents\My Music' へのアクセスが拒否されました。
該当のソースコード
C#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.IO; 5using System.Text; 6using System.Linq; 7using System.Windows.Forms; 8 9namespace GetDirectory 10{ 11 class GetDirectory 12 { 13 public static void GetFiles() 14 { 15 // マイドキュメントとデスクトップのフォルダパスを取得 16 var documentFilePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 17 18 // ファイル情報をサブディレクトリまで取得 19 var documents = Directory.EnumerateFiles(documentFilePath, "*", SearchOption.AllDirectories); 20 21 // エンコード情報 22 Encoding enc = Encoding.GetEncoding("UTF-8"); 23 24 // マイドキュメントのファイル情報をテキストファイルに書き込む 25 using (StreamWriter documentsWriter = new StreamWriter(@"一覧を書き込むテキストファイルのパス", false, enc)) 26 { 27 try 28 { 29 foreach (var document in documents) 30 { 31 documentsWriter.WriteLine(document); 32 } 33 } 34 catch (UnauthorizedAccessException ex) 35 { 36 MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); 37 return; 38 } 39 } 40 } 41 } 42}
試したこと
アクセス拒否とのことなので、まず頭に浮かんだのは権限の問題でした。
が、ここまででビルドしたアプリを、管理者権限で実行してみても同じエラーが出ます。
会社のPCで開発を行っているので、ドメインの問題かとも考えましたが、ドメインのドキュメントファイルを見ているのではなく、PCのアカウントのドキュメントファイルを参照しているのでおそらく関係ないかと思っています…。
ユーザーの偽装で対処しようかとも考えましたが、そもそも管理者権限で実行しても同じエラーが発生するので、偽装で対処できるかもわかりません(一応試してみようかとは思います)。
補足情報(FW/ツールのバージョンなど)
環境
Windows 10 Pro
.NET Framework 4.6.1
Visual Studio 2017
回答2件
あなたの回答
tips
プレビュー