8

私はこれにすでにたくさんのものがあることを知っていて、いくつかのことを試みましたが、それを修正するのに運がありませんでした。

XMLドキュメントを作成したC#プログラムがあり、それをMyDocuments内のフォルダーに保存しようとしています。関数を呼び出すと、次の例外が発生しXMLDoc.Saveます。

パス'C:\ Users \ Ash \ Documents\ConfigOutput'へのアクセスが拒否されました

VisualStudioを管理者として実行しています。それを修正する方法について何か考えはありますか?

デスクトップとC:\フォルダーにも保存してみました。

私はWindows7を使用しています。

ビルドされた実行可能ファイルの実行も機能しないようです。

お詫びします。私は愚かだったようです。実際、出力パスにファイル名を追加していませんでした。他の誰かがこの落とし穴で終わった場合に備えて、質問を削除しません!すべてのヘルプ/コメントをありがとう。

4

5 に答える 5

12

いくつかの可能性があります:

  • ConfigOutput はフォルダーです
  • ConfigOutput は使用中の (開かれた) ファイルです
  • ユーザー「Ash」としてログインしていません

通常、自分の Documents フォルダーに書き込むために管理者として実行する必要はありません。

于 2012-05-18T10:37:21.610 に答える
4

そのディレクトリ/ファイルへのアクセス許可を確認して取得する必要があります..その使用のためにSecurity namesapce

var permissionSet = new PermissionSet(PermissionState.None);    
var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, pathToFolder);
permissionSet.AddPermission(writePermission);

if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
{
    // do your stuff
}
else
{
    // alternative stuff
}
于 2012-05-18T10:42:46.397 に答える
4

ファイル名を指定していないようで、既存のディレクトリと同じ名前のファイルを作成できないため、パスを次のように変更してみてください。

C:\Users\Ash\Documents\ConfigOutput\Out.xml

于 2012-05-18T10:53:02.153 に答える
1

管理者としてアプリを実行してみてください。

アプリをデバッグする場合は、Visual Studio も管理者として起動します。

管理者としてアプリを強制的に起動するには、次のスレッドを参照してください: How do I force my .NET application to run as administrator?

PSファイルが別のFileStreamなどによってまだ開かれていないかどうかを確認してください。

于 2012-05-18T10:22:28.090 に答える
1

これが違いを生むかどうかはわかりませんが、絶対的な方法ではなく相対的な方法でフォルダーを指定することをEnvironment.GetFolderPath(Environment.SpecialFolder.MyDocuments)お勧めします。現在のユーザーのドキュメントのパスが提供されます。あなたが提供したものと異なるかどうかを確認してください。

もしそうなら、他の人が指摘しているように、別のユーザーまたは管理者の下でアプリを実行する必要があるかもしれません. 明らかに、あるユーザーが別のユーザーのドキュメント フォルダーにファイルを保存することは許可されていません。

私の場合、Visual Studio からアプリをデバッグするとき、ドキュメント フォルダーは、現在ログインして Visual Studio を実行しているユーザーと同じです。

最初に試し<requestedExecutionLevel level="asInvoker" uiAccess="true|false"/>て、徐々に と に移動highestAvailableできrequireAdministratorます。

または、アクセス許可を要求し、例外をキャッチして出力します。

try {
        FileIOPermission fileIOPermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, myDocFolderFile);
        fileIOPermission.Demand();
    } catch (SecurityException se) {
        Debug.WriteLine(se.ToString());
    }
于 2012-05-18T10:34:30.720 に答える