0

新しく作成されたフォルダー (フォルダー名はセッション ID) で、サーバーにアップロードされたばかりのファイルを読み取ろうとしています。

例外の詳細: System.UnauthorizedAccessException: パス '...\UploadFiles\jeiqw1qxya33e3r00idwlceo' へのアクセスが拒否されました。

どのユーザーにアクセス権を与えるべきかわかりません.ネットを見ると、アプリケーションプールが実行されるIDを追加するように言われています.ApplicationPoolIdentityに見えます...しかし、追加するこのユーザーが見つかりませんフォルダーのアクセス許可。だから私は「みんな」を追加し、完全に制御できるようにしました...心を実験するためだけに、それでも上記のエラーが発生します。

これは、ここでの最後の質問に関連しています... タブ区切りのテキストファイルを使用したStreamReader

' ' メソッドを使用するFile.ReadAllLines()と、これは例外のある行です。

4

4 に答える 4

0

皆様のご回答に感謝申し上げます。

今朝、新鮮な目でコードを見ると、コードの間違いに気づきました...

私が持っていた...

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID).ToList();

これは、ターゲットファイルではなく、フォルダを指します。

私はに変更しました...

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID + "/ediFile.txt").ToList();

これで動作します!結局、許可の設定が正しいので、これが私を混乱させたのも不思議ではありません!:)

于 2013-02-20T09:10:05.043 に答える
0

IIS 7.5以降を実行している場合、アプリプールを実行するユーザーは通常、「IIS APPPool {POOL NAME}」です。ここで、{POOLNAME}はプール/サイトの名前です。

アプリケーションプールIDでIIS7を使用している場合は、サイトが実行されているのはまだ「ネットワークサービス」だと思います。

ところで、yoru apppool(w3wp.exe)がタスクマネージャー/プロセスエクスプローラーなどのツールで実行されていることをユーザーに直接確認できます。

于 2013-02-19T16:38:00.473 に答える
0

アプリケーションがどの特定のアカウントで実行されているかを確認する別の方法は、コード System.Security.Principal.WindowsIdentity.GetCurrent().Name です。

しかし、そのアカウントまたは全員にフル コントロールを与えてもアクセス拒否エラーが引き続き発生する場合、新しくアップロードされたファイルがロックされている可能性はありますか? アップロードしたファイルを仮想ディレクトリ内の場所に保存していますか? ファイルが参照可能な場所に保存されている場合、IIS がファイルを一時的にロックすることがあります。ウィルス スキャナによってファイルがロックされることもあります。

于 2013-02-19T19:21:32.690 に答える
0

動的に作成されたフォルダーへの読み取りアクセス権を付与することは実用的ではありません-フォルダー名はセッションIDであると言ったように。

ただし、このようにファイルをストリームしてユーザーに戻すことができます。

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.Charset = "utf-8";
response.ContentType = "text/xls";
response.AddHeader("content-disposition", 
   string.Format("attachment; filename={0}", fileName));
response.BinaryWrite(File.ReadAllBytes(filePath));
response.End();
于 2013-02-19T16:33:31.610 に答える