6

わかりましたので、ここで非常に簡単なことをしていると思います。ASP.NET Web ページを作成しましたが、ローカル ディレクトリに書き込もうとしています。

次のコードを使用しています。

System.IO.File.WriteAllLines("log.txt", messages);

次の例外をスローしています。

Access to the path 'c:\windows\system32\inetsrv\log.txt' is denied.

私の ASP.NET アプリケーションは、次のディレクトリにあります。

c:\inetpub\wwwroot\sites\mysite\

そのため、そのディレクトリ自体を提供していないのに、c:\windows\system32\inetsrv\ ディレクトリに書き込もうとしている理由について混乱しています。

コードを次のように変更しようとしましたが、新しいディレクトリで同じエラー メッセージが表示されます。

System.IO.File.WriteAllLines("c:\\inetpub\\wwwroot\\sites\mysite\log.txt", messages);

編集 1

誰もが本当に私をたくさん助けてくれたので、これについての答えを受け入れるのは難しかった. tom_yes_tom の回答を受け入れたのは、彼が私の問題の前半である回答を最初に投稿したからです。私の問題の残りの半分は、Fabio が指摘した hbrock のソリューションに関連していました。

4

3 に答える 3

6

「C:\inetpub\wwwroot\sites\mysite\App_Data」フォルダーを作成し、代わりにそこにデータを保存します。

System.IO.File.WriteAllLines(Server.MapPath("~/App_Data/log.txt"))

絶対に mysite ディレクトリに保存する必要がある場合は、そこにログ ファイルを配置することによるセキュリティ上の影響に注意し、ディレクトリのアクセス許可を適切に設定してください。IIS を実行しているユーザーは、そのディレクトリを読み書きできる必要があります。

完全な資格パス:System.Web.HttpContext.Current.Server

于 2012-09-12T17:43:40.960 に答える
3

「パス'c:\ windows \ system32 \ inetsrv\log.txt'へのアクセスが拒否されました」というメッセージが表示されます。System.IO.File.WriteAllLines( "log.txt"、messages)を実行すると、c:\ windows \ system32 \ inetsrvはIIS実行可能ファイルが配置されているディレクトリ(w3wp.exe)であるためです。

Server.MapPathを使用して、仮想ディレクトリの物理パスを取得する必要があります。

仮想ディレクトリのアプリケーションプールを実行しているユーザーを確認し、仮想ディレクトリのフォルダーへの書き込み権限をユーザーに付与します。

于 2012-09-12T18:03:47.903 に答える
1

これは役立つはずです:

特定のファイルに読み取り、書き込み、および変更のアクセス許可を付与するには

Windows エクスプローラーで、必要なファイルを見つけて選択します。

ファイルを右クリックし、[プロパティ] をクリックします。

[プロパティ] ダイアログ ボックスで、[セキュリティ] タブをクリックします。

[セキュリティ] タブで、ユーザーの一覧を調べます。Network Service アカウントが表示されていない場合は、追加します。

[プロパティ] ダイアログ ボックスで、ネットワーク サービスのユーザー名をクリックし、[ネットワーク サービスのアクセス許可] セクションで、読み取り、書き込み、および変更のアクセス許可を選択します。

[適用] をクリックし、[OK] をクリックします。

情報: http://msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess

于 2012-09-12T17:57:58.890 に答える