とあるデータの1日の集計結果データをPDFにまとめて出力するために、
そのファイルを出力する先を設定する画面があります。
設定画面で保存先パスをDBに保持する前に、そのフォルダが書き込み可能であるかを確認したいのですが、手法がわからなくて困っています。
フレームワークは.NET Core 3.1で、色々調べてみてもうまく出てこず、
・FileIOPermission
→参考先に書かれているようなことを試してみてもうまく情報を掴めない。(使い方が間違ってる?)
・DirectoryInfo.GetAccessControl
→そもそも.NET Core に非対応。
・テストファイルを作ってみて、作れない場合のExceptionで書き込み権限無しエラーとする。
→ごり押しすぎなのでは? ほかに手法ありそう。
といった状態になっています。
何か方法は無いでしょうか…
環境情報等、必要そうな情報はご質問頂き次第随時追記致します。
参照先としているリンクは解決しているわけでは無さそうで、ついてる回答は別の質問や資料へのリンクになってますが、何を試したんでしょうか?
「うまく情報を掴めない」という表現もよくわからず、具体的にどういう情報が取得可能だと思ってやってみて、どんな情報が取得されたんでしょうか?
別に難しいことを考えなくても、テストファイルじゃなく本番のファイルを作って、例外が発生したらユーザーに表示でいいと思いますが。
というのも、設定時に書き込みできたからと言って実行時にもできるとは限らないからです。
例外を発生させて強制終了ではなく、そこで設定を変更して継続できるよう作るのがいいんじゃないかと思います。
そもそも何で Core なのですか? Windows OS のファイルシステムにアクセスして何かしようとするなら Core ではなくて .NET Framework ベースにすればよいと思うのですが・・・
仕事のため、レスが遅くてすみません。
>gentaroさん
具体的に試したこととしては、
FileIOPermissionAccessのRead, Write, Append, NoAccess, PathDiscovery, AllAccessを
FileIOPermissionにそれぞれバラバラにセットして、
1つずつ.Demand()して落ちるかどうかを試しました。
これによって、現ユーザーでの読み取り書き込み権限があるかを見れると思っていたのですが、
.Demand()でExceptionが発生することは無く、全て素通りする感じでした。
>Zuishinさん
「設定時に書き込みできたからと言って実行時にもできるとは限らないから」というのはごもっともです。
ただ、保存先のフォルダパスを指定した段階で「書き込み権限が無いから保存できないよ」と出せればよいかなと考えて実装しようとしている次第です。
実際のファイル出力時は失敗しても続きの処理を続行するよう組まれています。
>SurferOnWwwさん
.NET Coreの選定理由は今後Linux環境で動かす可能性があるからです。
結局、この回答でできたのかできなかったのか、どっちなんでしょう?
なぜ無視?
毎日ログインしているのになぜ無視?