- 締切済み
C#でアクセス権限の取得方法が知りたいです。
指定したフォルダのアクセス権限を取得し、「書き込み権限が無い」場合エラーを出力したいのですが、 良い方法があれば教えていただけますでしょうか。 開発環境は、visualC#を使っています。 現在圧縮を行う ⇒ ファイルを出力する ⇒ 出力先に書き込み権限がなかった場合、エラーを出力する というプログラムを書いています。 そこでアクセス権限を取得したいです。 AccessControlType AccountName FileSystemRights IsInherited Allow NT AUTHORITY\SYSTEM FullControl False Allow BUILTIN\Administrators FullControl False Allow BUILTIN\Users ReadAndExecute, Synchronize False Allow NT SERVICE\TrustedInstaller FullControl True Allow BUILTIN\Administrators ReadAndExecute, Synchronize True Allow NT AUTHORITY\SYSTEM ReadAndExecute, Synchronize True Allow BUILTIN\Users ReadAndExecute, Synchronize True GetAccessControlメソッドで、上記のように各権限をテキストで出力する事はできるのですが、 「書き込み権限が無い場合」という条件をif文で判別する場合どのようにすれば良いか悩んでします。 このような出力でアクセス権限を取得しなくても、 書き込み権限があるかどうか判別する為のメソッド(返り値としてtrue or false)があるのか。 このテキストでの出力から文字列操作でtrueかfalseを抜いて、 フルコントロールもしくはユーザの書き込み権限いずれかの部分がtrueになっているのを確認しなければいけないのか。 ご教授いただけないでしょうか。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
ざっくり検索しただけですが…… http://intre.net/item_6569.html 辺りとか参考になりますかねぇ? SIDやらなんやらが関わって来ますし、ちょっと面倒かも知れませんね。 上位のフォルダにFileSystemRights列挙体のCreateFilesが必要かも知れませんし。 文字列操作ではありませんが、取得したデータからの検索処理みたいなものは必要でしょう。 GetAccessRules()メソッドでコレクションを取得して、現在の権限が対応するものを探す必要があるでしょう。 # ユーザーに権限が設定されているかグループに権限が設定されているか…という問題もありますし。 # グループに設定してあって個別ユーザーの設定は無い。ということも考えられます。ドメインに参加している場合…とか。 使用するメソッド名やらでWeb検索すると他にも見つかるかも知れませんね。 # 英語なページである可能性も否定出来ませんけど。
- Wr5
- ベストアンサー率53% (2173/4061)
う~ん……実際にファイル作成してみるのが簡単そうですけどねぇ。 書き込めなければ例外が発行されるでしょうし。 GetAccessControlメソッドってどのクラスのでしょう? FileInfoですかね?
補足
http://msdn.microsoft.com/ja-jp/library/system.io.file.getaccesscontrol%28v=vs.85%29.aspx このクラスです^^; そうですね、書き込めなかったら例外が起きるんですが 起きる前に検知してエラーだしたいんですよね・・。