2012-03-02 36 views
3

ファイルにユーザー入力を書き込む必要がある単純なC#アプリケーションを構築しています。C#とFile.WriteAllTextエラー

私の最初の問題は、ユーザーが設定ファイルのパスを設定できるようにすることですが、次の起動時に設定ファイルを読むことができるようにすることです。

私の第二の問題は、私のようなものを使用する場合:

File.WriteAllText(@"C:\Users\Public\settings.settings", message); 

私は次のエラーを取得:

System.Security.SecurityException: Request for the permission of type 
    'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, 
    Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. at 
    System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& 
    stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() 
     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) 
    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, FileAccess access, 
    FileShare share, Int32 bufferSize, FileOptions options) 

    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) 
    at System.IO.File.WriteAllText(String path, String contents, Encoding encoding) 
    at IMDBGrabber.frmSettings.writeToFile(String p) 
    The action that failed was: Demand 

    The type of the first permission that failed was: System.Security.Permissions.FileIOPermission 

    The Zone of the assembly that failed was: MyComputer 

任意のアイデア?

+0

アプリケーションを実行しているユーザーごとに、対象のフォルダのアクセス許可を確認してください。 try catchを使用してSecurityExceptionをトラップします。 –

答えて

3

プロジェクト=>プロパティを右クリックし、[セキュリティ]タブを確認します。 [ClickOnceのセキュリティ設定を有効にする]をオフにして、もう一度お試しください。 問題が解決しない場合は、[署名]タブの唯一のオプションもオフにします。

+0

ありがとうございました。それは私の問題を解決しました。 –

+0

うわー、うまくいくとは思わなかったけど、それはした。なぜ今..... ..... –

+2

セキュリティタブがないのかわかりません... – hakan

5

驚くべきことですが、すべてのユーザーが"C:\Users\Public"にアクセスできるわけではありません。

は、すべてのユーザーが書き込みにアクセスする必要がありますEnvironment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\settings.settings";

であなたのファイルを入れてみてください。

また、アプリ固有のサブフォルダも使用することを検討してください。

0

C:\ Users \ Publicフォルダは書き込み可能ですか?そうでない場合は、SecurityException(セキュリティ上の問題に関連していると思われる)があること、および前の例外がファイルIOに関連していたことを例外トレースから通知していることを確認してください。だから、あなたのアプリがもっともらしいです。そのフォルダに対する書き込み権限がない(またはそのユーザーが実行している)ユーザーではありません。

+0

これはセキュリティ例外であり、IO例外ではありません。フォルダが書き込み可能かどうかは関係ありません。 – Gabe

+0

ユーザーが書き込みできるかどうかを確認するにはどうすればよいですか?いくつかのデータをファイルに書き込む以外の方法がありますか? –

+0

私は謝罪する必要があります。最初のアクセス許可の種類は、System.Security.Permissions.FileIOPermissionです。さらに、スローされた例外がファイルIOに関連していることを外挿すると、実際には大失敗に終わりました。本当にすみません。 –

1

c:で保護されたフォルダに書き込むには、管理者としてアプリケーションを実行する必要がありました。たとえばVisual Studioでアプリケーションをデバッグする場合は、「C:¥Program Files(x86)¥Microsoft Visual Studio 12.0¥Common7¥IDE¥devenv.exe」を右クリックし、「管理者として実行」を選択してください。そこからソリューションを開きます。私のアプリはc:\

のルートに書き込もうとしていました。
関連する問題