質問
この質問がここで何度も尋ねられたことは知っていますが、私の問題の解決策は見つかりません。 .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)
私はこのフォルダー(SaveHere)を完全に制御しました network service
と iis_iusrs
, 、さらに完全にコントロールしました everyone
しかし、まだこの例外を取得しています。私はExplorerとIIS Managerを介してアクセスを試みましたが、まだ運がありません
Windows Server 2008 R2とIIS 7.5でやっていますが、誰にアクセスする必要がありますか?
ありがとう
解決
あなたはウェブサイトのアプリケーションプールからそれが実行されているアイデンティティは何ですか(デフォルトでこれは Application Pool Identity
)そして、正しい許可を許可します。
他のヒント
パスへのアクセス
メッセージを注意深く読んでください。ディレクトリと同じ名前のファイルに保存しようとしています。うまくいかないので、ファイルで満たされたディレクトリを1つの新しいファイルで上書きすることはできません。それは診断できないデータ損失を引き起こすでしょう、「パスへのアクセスが拒否されます」は、それが起こらないようにファイルシステムが反撃します。
例外メッセージは理想的ではありませんが、OSからまっすぐに来て、それらは石で鋳造されています。フレームワークは、多くの場合、より良いメッセージを生成するために追加のチェックを追加しますが、これはネットワーク上の高価なテストです。パフォーマンスも機能です。
'c: inetpub wwwroot mysite images savehere mumble.jpg'などの名前を使用する必要があります。検討 path.combine() パス名を確実に生成します。
サーバー上にファイルを作成しようとしているときに同じ問題を抱えていました(実際、テンプレートからのコピーであるファイル)。
これが完全なエラーメッセージです:
{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.
呼ばれる新しいフォルダーを追加しました Templates
IISアプリフォルダー内。私の場合の非常に重要なことの1つは、そのフォルダー上のIUSRユーザーに書き込み(Gravar)許可を与える必要があることです。あなたも与える必要があるかもしれません Network Service
と ASP.NET v$.#
同じ書き込み許可。
これを行った後、すべてが期待どおりに機能します。
まったく同じ問題がありました。
解決策は、私がアクセスしようとしていたファイルは 読んでください, 、読み取られたテンプレートファイルからコピーされたため。
u003Cfacepalm />
ファイル名を設定せずにファイルを保存しようとすると、この問題が発生しました。
古いコード
File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));
作業コード
File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
私の問題は、読み取りアクセスのみを求めなければならなかったことでした:
FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
Webアプリケーションのアプリケーションプールは、トラブルシューティングとして実行され、ネットワークサービスを備えた新しいアプリプールをIDのIDとして作成し、Webアプリケーションに作成した新しいアプリプールを使用して、エラーが持続しているかどうかを確認してください。
次のヒント そうではありません このスレッドの元の質問への回答ですが、私がちょうどしたのと同じ愚かな間違いを犯した後、このウェブページで終わる他のユーザーを助けるかもしれません...
ASP.NET FileuPload Controlを取得して、ファイルをアップロードして、「」を含むネットワークアドレスにファイルをアップロードしようとしていました。隠されたシェア「すなわち:
mynetworkserver c $ somedirectoryorother
私はそれを理解していませんでした。 Visual StudioでデバッグモードでWebページを実行した場合、正常に動作します。しかし、プロジェクトが展開され、アプリケーションプールユーザーを介して実行されていたとき、このネットワークディレクトリを見つけることを拒否しました。
IISサイトが実行されているユーザーを確認し、このユーザーにこのディレクトリに完全な権限を与えました。mynetworkserver「サーバーなど。しかし、何も機能しませんでした。
(もちろん!)理由は、これらの隠されたドライブシェアを「見る」ことができる管理者だけができるからです。
私の解決策は、単に「通常の」共有を作成することでした
mynetworkserver somedirectoryorother
そして、これは「パスへのアクセスは...拒否されます」エラーを取り除きました。 fileuploadはコマンドを正常に実行することができました
fileUpload.SaveAs(networkFilename);
これが私と同じ間違いを犯した他のユーザーに役立つことを願っています!
また、大きなファイル(4MBを超える)をアップロードしている場合、IIS7はweb.configファイルを変更する必要があることに注意してください。 2 場所。このリンクをクリックして、必要なことを読む:ASP.NETに大きなファイルをアップロードします
私はこの設定で解決しました:
iis>アプリケーションプール> [サイト]>高度な設定...> ID>ビルトインAccund> localSystem
私の問題はそのようなものでした:
FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
しかし、パスを使用する代わりに、file.fullnameを使用する必要があります...それが他の誰かを助けるかどうかはわかりません。
内蔵アカウントからカスタムアカウントに設定を変更し、他のサーバーのユーザー名とパスワードを入力します。
設定を統合して(クラシックモードの代わりに)保持します。
多分それはあなたを助けます。
string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);
ディレクトリを作成します Hereを保存します 仮想ディレクトリになり、コントロールパネルから読み取り/書き込み許可を与える
私が書き込もうとしていたファイルと同じ名前のディレクトリを持っていたので、人々もそれを探すことができます。
地元のワークステーションで開発中にこの問題に遭遇しました。
数回失敗した後 iisreset
呼びかけ、私はこの状況を改善しました 再起動 私のマシン。
振り返ってみると、オープンファイルハンドルが問題を引き起こしている可能性があります。
同じ問題がありましたが、ファイルを別の場所に保存してからファイルをコピーして、望んでいた場所に貼り付けて修正しました。既存のファイルを交換するためにオプションを使用しましたが、それが私のためにトリックをしました。これは最も効率的な方法ではないことは知っていますが、動作し、15秒もかかりません。
私はこれに多くの問題を抱えており、特に私のコードがローカルで実行されていることに関連していますが、IISでそれを実行する必要があるとき、それはこのエラーを投げかけていました。コードにチェックを追加し、アプリケーションが最初の実行でフォルダーを作成できるようにすることが、フォルダーの認可を台無しにすることなく問題を修正することがわかりました。
フォルダを使用するメソッドを呼び出す前に、このようなもの
bool exists = System.IO.Directory.Exists("mypath");
if (!exists)
System.IO.Directory.CreateDirectory("mypath");
私は完全な許可を得て仮想監督を作成し、そこにFFMPEGソースとビデオファイルを追加したので、最終的に誰でもアクセスできるので理にかなっています。