web-dev-qa-db-ja.com

パスへのアクセスが拒否されたのはなぜですか。

ファイルを削除しようとしているのに例外が発生するという問題があります。

if (result == "Success")
{
     if (FileUpload.HasFile)
     {
         try
         {
              File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
              string filename = Path.GetFileName(btnFileUpload.FileName);
              btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
         }
         catch (Exception ex)
         {
               Message(ex.ToString());
         }
      }
}

また、削除しようとしているフォルダはネットワークサービスを完全に制御していることにも注意してください。

完全な例外メッセージは次のとおりです。

System.UnauthorizedAccessException:パス「C:¥Users¥gowdyn¥Documents¥Visual Studio 2008¥Projects¥hybrid¥hybrid¥temp_loginimages¥enviromental.jpg」へのアクセスが拒否されました。 System.IO .__ Error.WinIOError(Int32 errorCode、String maybeFullPath)でSystem.IO.File.Delete(String path)でhybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(Object sender、EventArgs e)in C:\ Users\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\User_Controls\Imgloader_Add_Edit_Tbl.ascx.cs:242行

何か案は?

135
nick gowdy

私も問題を抱えていたので、私はこの記事につまずいた。コピー/削除の前後に、次のコード行を追加しました。

削除

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);

コピー

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
165
riaandl

によると File.Deleteメソッド ...

UnauthorizedAccessExceptionは4つのうちの1つを意味します:

  • 呼び出し側に必要な許可がありません。
  • ファイルは使用中の実行可能ファイルです。
  • パスはディレクトリです。
  • パスに読み取り専用ファイルが指定されています。
143
CrazyTim

これは古い問題ですが、検索中に私はそれに遭遇しました。 SaveAsの保存パスに実際のファイル名コンポーネントがないことがわかりました...

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
25
Andrew Edvalson

ユーザーがWebサイトに接続しようとすると、IISはIUSER_ComputerNameアカウントに接続を割り当てます。ここで、ComputerNameはIISは実行中です。既定では、IUSER_ComputerNameアカウントはGuestsグループのメンバです。このグループにはセキュリティ上の制限があります。そのフォルダへのIUSER_ComputerNameへの壮大なアクセスを試みる

ここで はIIS securityに関する回答として非常に優れています

お役に立てれば

17
Arsen Mkrtchyan

宛先がファイルであることを認識していなかったため、エラーが発生しました。 2番目のパラメーターとしてフォルダーがありました(cmdで機能します)。 C_ Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.は最初のパラメーターだけでなく、2番目のパラメーターにもファイルを必要とするため、File.Moveを取得しました。したがって、2番目のパラメーターとしてディレクトリを配置すると、ファイルを書き込もうとしていますc:\crpというディレクトリがある場合、c:\crpのようになります。

これは不正解File.Move(args[0],"c:\\crp");になります

したがって、これは正しいFile.Move(args[0],"c:\\crp\\a.a");

File.Copyについても同じことが言えます

12
barlop

Visual Studioを右クリックし、管理者として実行をクリックします。

これが問題のあるIIS Webサイトである場合は、そのサイトまたはアプリケーションが使用するアプリケーションプールの詳細設定のIdentityプロパティを確認してください。 ApplicationPoolIdentityに設定されていることがわかりますが、その場合はパスにアクセスする必要があるユーザーになります。

または、古いスタイルにして、IDをネットワークサービスに設定し、ネットワークサービスユーザーにパスへのアクセス権を付与することもできます。

I/Oエラーまたは特定の種類のセキュリティエラーのためにオペレーティングシステムがアクセスを拒否したときにスローされる例外。

私は同じことにぶつかりました。ファイルが隠されていないことを確認してください。

3
user1209939

あなたは/ save toから削除しようとしているフォルダの権限を変更する必要があります。含まれているフォルダーを右クリックし、「セキュリティー」タブを使用して、アプリケーションが実行されているユーザーに変更変更権限を許可します。

3
Brissles

I/Oエラーまたはセキュリティエラーのためにオペレーティングシステムがアクセスを拒否した場合、UnauthorizedAccessException例外がスローされます。

ファイルまたはレジストリキーにアクセスしようとしている場合は、それが読み取り専用ではないことを確認してください。

2
reza.Nikmaram

私はこのエラーに遭遇し、ほんの一瞬でそれを解決しました。フォルダがすべて読み取り専用になっている理由がわかりません。読み取り専用をキャンセルして適用します。ただし、それでも読み取り専用です。それで私はファイルをルートフォルダに移動しました、それは働きます - とても変です。

2
MOLLMY

私にとっても同じ問題、私はファイルではなくフォルダを指していました。

だからパスで確認し、パス+ファイル名を指定

System.IO.File.WriteAllBytes("path", bytearray);
1
jineesh vp

コードから共有フォルダのパスにアクセスしようとしている場合は、セキュリティタブを介して物理フォルダに適切な権限を付与するだけでよいことに注意してください。また、共有タブを使用して、フォルダを対応するアプリプールユーザーと「共有」する必要があります。

1
Kacho

私のウィンドウサービスが例外を投げ始めたときにも私はこの問題に直面しています

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.

そこで解決策として、私は自分のサービスに関連するユーザーアカウントをチェックしました、以下のスクリーンキャプチャーに示すように

enter image description here

だから私の場合それはNETWORK SERVICEでした

次に、フォルダのプロパティに移動して、関連付けられているユーザーアカウントが[アクセス許可]タブにも存在するかどうかを確認します。それは私の場合には欠けていました、そして私がそれを追加したとき、それは私の問題を修正しました。

詳細については、以下のスクリーンショットを確認してください。

enter image description here

1
Jitender Kumar

ファイルを削除するときに私は正確なエラーがありました。それはフォルダのフルコントロールを持っていたにもかかわらず共有フォルダから.pdfドキュメントを削除することができなかったサービスアカウントの下で走っているWindowsサービスでした。

私にとってうまくいったのは、共有フォルダ>詳細設定>共有>追加のセキュリティタブに移動することでした。

その後、管理者グループにサービスアカウントを追加して変更を適用すると、サービスアカウントはそのフォルダ内のすべてのファイルに対してすべての操作を実行できました。

1
LuTheZy

ファイルのプロパティを確認してください。読み取り専用がチェックされている場合は、チェックを外します。これは私のUnauthorizedAccessExceptionに関する個人的な問題です。

1
user3238433

共有サーバー上の新しく移動したWebサイトでも同じ問題がありました。 Webホストパネル(DotNetPanel)をtrueに設定して「書き込み許可を許可」することで解決しました。そのため、すべてのコードを確認する前に共有サーバーを使用している場合は、サーバー構成を確認する価値があり、時間を大幅に節約できます。

1
Drakell

私はこのエラーに直面していた

ファイル名FileName = ""パスCombineにするとき

それはfileではなくPath Directoryになります。これは上記の のように問題です

だからあなたはこのようにFileNameをチェックする必要があります

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
1

私の特定のケースでは、私は10000個のフォルダを繰り返し作成および削除していました。問題は、Directory.Delete(path, true)メソッドが返すにもかかわらず、根底にあるOSのメカニズムがディスクからファイルを削除している可能性があるということにあると思われます。そして、古いフォルダを削除した直後に新しいフォルダを作成しようとすると、まだ完全には削除されていないためにロックされているフォルダもあります。そして、私はSystem.UnauthorizedAccessException: "パスへのアクセスが拒否されました"を取得しています。

enter image description here

Thread.Sleep(5000)の後にDirectory.Delete(path, true)を使うことでその問題を解決できます。私はこれが安全ではないことに絶対に同意します、そして私は誰かがそれを使用することを奨励していません。私はここで私の答えを改善するためにこの問題を解決するためのより良いアプローチを望みます。今、私はただこの例外が起こり得る理由を考えているだけです。

class Program
{
    private static int numFolders = 10000;
    private static string rootDirectory = "C:\\1";

    static void Main(string[] args)
    {
        if (Directory.Exists(rootDirectory))
        {
            Directory.Delete(rootDirectory, true);
            Thread.Sleep(5000);
        }

        Stopwatch sw = Stopwatch.StartNew();
        CreateFolder();
        long time = sw.ElapsedMilliseconds;

        Console.WriteLine(time);
        Console.ReadLine();
    }

    private static void CreateFolder()
    {
        var one = Directory.CreateDirectory(rootDirectory);

        for (int i = 1; i <= numFolders; i++)
        {
            one.CreateSubdirectory(i.ToString());
        }
    }
}
0
Aleksei Mialkin

コロン(:)文字がないか、ドライブ文字の後にない場合は、まずパスを確認してください。コロンが欠けていない場合は、そのパスにアクセス/書き込み許可が付与されているかどうかを確認できます。私は同じ問題を抱えていたと私はコロン、許可を欠けていただけで、他のすべては大丈夫だった。

C:\folderpath

うまくいきますが、

C\folderpath .........(missing colon)

アクセス拒否エラーが発生します。

0
Vijay Dodamani

あなたがBitDefenderを使っているなら、セーフファイル機能があなたの操作をブロックする可能性が高いです。これは、より高度なバージョンのいくつかに付属しているRansomware保護の形式です。

あなたのアプリケーションにBitDefenderのアクセスを許可して、もう一度やり直してください。

さらに詳しい情報は このBitDefenderサポートページ にあります。

0

このエラーはデザインモードではなく発生する可能性がありますか。実行モード... .INIまたは.HTMファイル(設定ファイル、ヘルプファイル)へのアクセスを必要とするクラスメンバの作成などを行う場合は、宣言内の項目を初期化しないで後で初期化しますFORM_Load()などで...初期化するときは...ガードIF文を使用します。

    /// <summary>FORM: BasicApp - Load</summary>
    private void BasicApp_Load(object sender, EventArgs e)
    {
        // Setup Main Form Caption with App Name and Config Control Info
        if (!DesignMode)
        {
            m_Globals = new Globals();
            Text = TGG.GetApplicationConfigInfo();
        }
    }

これにより、デザインモードのときにMSVSデザイナはINIまたはHTMファイルを作成しようとしなくなります。

0
Terry

私はSystem.IO.File.OpenWrite(path)を使おうとしていました

そしてOpenWrite()にディレクトリへのパスを渡しているだけなのでうまくいきませんでしたが、書き込みたいファイルへのパスがすべて必要です。したがって、UnauthorizedAccessExceptionを回避するために、末尾のfilename.extensionを含むフルパスをOpenWriteに渡す必要があります。

0
SeanMC

フォルダを移動または作成した後でフォルダの名前を非常に速く変更しようとしたときに、このエラーが発生しました。

簡単なSystem.Threading.Thread.Sleep(500);はそれを解決しました:

void RenameFile(string from, string to)
{
   try
   {   
      System.IO.File.Move(from, to)      
   }   
   catch 
   {  
       System.Threading.Thread.Sleep(500);      
       RenameFile(from, to);      
   }   
}
0
Arjan de Bruijn

私は、サーバーに配置した後にこれを実行しようとしたときにも同じ問題に直面しました。

dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
    DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);

管理者を含む他のグループにIISの権限を許可しましたが、問題は解決しました。

0
Manish Singh

UWP(Universal Windows)アプリケーションを作成しようとしている人にとっては、ファイルのパーミッションはもっと制限されており、一般にデフォルトでは拒否されています。また、システムユーザーのアクセス許可よりも優先されます。あなたは基本的にどちらかのファイルにアクセスするだけです。

  • インストール場所
  • AppDataの場所
  • ファイル または フォルダ ピッカーで選択したファイル
  • アプリマニフェストで要求されている場所

詳細については、こちらを参照してください。=> https://docs.Microsoft.com/ja-jp/windows/uwp/files/file-access-permissions

0
Tezra