web-dev-qa-db-ja.com

パスへのアクセスが拒否されました

私はこの質問がここで何度も尋ねられたことを知っています、しかし私は私の問題に対する解決策を見つけることができません。画像を.net c#のフォルダに保存しようとしていますが、この例外が発生します。

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

私はnetwork serviceiis_iusrsにこのフォルダー(savehere)へのフルコントロールを与えました、さらにeveryoneへのフルコントロールを与えましたが、それでもこの例外を得ます。私はExplorerとIIS managerを介してアクセスしようとしましたが、まだ運がありません。

私はWindows Server 2008 R2とそれをやっていますIIS 7.5、だれがアクセスを許可する必要がありますか。

ありがとう

152
Burjua

Webサイトのアプリケーションプールから実行しているIDが何であるか(デフォルトではApplication Pool Identity)を調べ、正しいアクセス許可を付与する必要があります。

85
Oded

パス「C:\ inetpub\wwwroot\mysite\images\savehere」へのアクセスが拒否されました

メッセージをよく読んでください。ディレクトリと同じ名前のファイルに保存しようとしています。それは動作できません、あなたは単一の新しいファイルでファイルでいっぱいになったディレクトリを上書きすることができません。これは、「パスへのアクセスが拒否された」と判断できないデータの損失を引き起こす可能性があります。これを防ぐためにファイルシステムが闘っています。

例外メッセージは理想的ではありませんが、OSから直接送られてくるもので、それらは石で投げかけられています。フレームワークは、より良いメッセージを生成するためにしばしば追加のチェックを追加しますが、これはネットワーク上での高価なテストです。 Perfも機能です。

あなたは 'C:\ inetpub\wwwroot\mysite\images\savehere\mumble.jpg'のような名前を使う必要があります。確実にパス名を生成するには、 Path.Combine() を検討してください。

201
Hans Passant

サーバー上にファイル(実際にはテンプレートからのコピーであるファイル)を作成しようとしているときに私は同じ問題を抱えていました。

これが完全なエラーメッセージです。

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

IIS appフォルダーの中にTemplatesという名前の新しいフォルダーを追加しました。私の場合、非常に重要なことの1つは、そのフォルダに対するIUSRユーザーに書き込み(Gravar)アクセス許可を付与する必要があることです。 Network ServiceASP.NET v$.#に同じ書き込み権限を与える必要があるかもしれません。

enter image description here

これを実行した後、すべて正常に機能します。

20

私は全く同じ問題を抱えていました。

解決策は、私がアクセスしようとしていたファイルが readonly だったことです。

<facepalm />

11
Ruskin

ファイル名を設定せずにファイルを保存しようとすると、この問題が発生しました。

旧コード

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

作業コード

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
7
MarceloBarbosa

私の問題は、私が読み取りアクセスのみを要求しなければならなかったということでした:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
5
jesal

フォルダにIIS_IUSERSフルコントロール権限を追加してください。このオプションは、フォルダのプロパティの[セキュリティ]タブにあります。 find this option and user in this image

5
Ali Rasouli

次のヒントは、このスレッドの最初の質問に対する答えではありませんが、私がしたのと同じ愚かな間違いをした後にこのWebページにアクセスする他のユーザーに役立ちます。

ASP.Net FileUploadコントロールを取得して、そのファイルを「隠し共有」を含むネットワークアドレスにアップロードしようとしていました。

\ MyNetworkServer\c $\SomeDirectoryOrOther

わかりませんでした。 WebページをVisual Studioのデバッグモードで実行した場合は、問題なく動作します。しかし、プロジェクトがデプロイされ、アプリケーションプールユーザーを介して実行されていたとき、プロジェクトはこのネットワークディレクトリを見つけることを拒否しました。

自分のIISサイトで実行されているユーザーを確認し、このユーザーに "MyNetworkServer"サーバーなどのフルディレクトリへの完全なアクセス許可を付与しました。働いた。

その理由は(もちろん!)管理者だけがこれらの隠しドライブ共有を「見る」ことができるということです。

私の解決策は、単に「通常の」共有を作成することでした。

\ MyNetworkServer\SomeDirectoryOrOther

そしてこれは、 "パスへのアクセス...が拒否されました"というエラーを取り除きました。 FileUploadはコマンドを正常に実行できました

fileUpload.SaveAs(networkFilename);

これが私がしたのと同じ間違いを犯す他の何人かのユーザーに役立つことを願っています!

大きなファイルをアップロードする場合(4 MBを超える)、IIS 7では2つのの場所でweb.configファイルを変更する必要があります。あなたがする必要があることを読むためにこのリンクをクリックしなさい: ASP.Netで大きなファイルをアップロードする

4
Mike Gledhill

私はこの設定で解決しました:

IIS>アプリケーションプール> [あなたのサイト]>詳細設定...>アイデンティティ>組み込みアカウント> LocalSystem

トラブルシューティングを行うには、ネットワークサービスをIDとして使用して新しいApp Poolを作成し、作成した新しいApp PoolをWebアプリケーションに使用させてエラーが解決されるかどうかを確認してください。

4
kd7
  1. 設定をビルトインアカウントからカスタムアカウントに変更し、他のサーバーのユーザー名とパスワードを入力します。

  2. 設定を(クラシックモードではなく)統合されたままにします。

2
uday

私の問題はそのようなものでした:

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

しかし、パスを使用する代わりに、File.FullNameを使用する必要があります。他のユーザーに役立つかどうかはわかりません。このエラーでの自分の経験を渡すだけです。

2
Tarcísio Luna

多分それはあなたを助けるでしょう。

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.Zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);
1
umutcakar

私が書き込もうとしていたファイルと同じ名前のディレクトリを持っていたので、人々はそれについても気を配ることができます。

0
Samuel

同じ問題を抱えていましたが、ファイルを別の場所に保存してから、ファイルをコピーして、希望する場所に貼り付けることで修正しました。既存のファイルを置き換えるためのオプションを使用しましたが、それが私にとってのトリックでした。私はこれが最も効率的な方法ではないことを知っていますが、それは働き、15秒以下かかります。

0
Samuel Nde

ローカルワークステーションで開発中にこの問題が発生しました。

いくつかの失敗したiisreset呼び出しの後、私は私のマシンを再起動することでこの状況を直しました

振り返ってみると、開いているファイルハンドルが問題を引き起こしている可能性があります。

0
Jim G.

私の場合は、IISのWebサイトに.NET承認規則を追加する必要がありました。

匿名ユーザーを許可するルールを追加しました。

.NET Authorization Rules

0
GerardBeckerleg

ディレクトリを仮想ディレクトリに保存し、コントロールパネルから読み取り/書き込み権限を付与します。

0
Harsh Baid