190

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

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' へのアクセスが拒否されました。C:\Users\gowdyn\ の Hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (オブジェクト送信者、EventArgs e) で System.IO.File.Delete(String path) で System.IO.__Error.WinIOError (Int32 errorCode、おそらくフルパスの文字列) でDocuments\Visual Studio 2008\Projects\hybrid\hybrid\User_Controls\Imgloader_Add_Edit_Tbl.ascx.cs: 242 行目

何か案は?

4

32 に答える 32

191

私も問題を抱えていたので、この投稿に出くわしました。コピー/削除の前後に次のコード行を追加しました。

消去

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

コピー

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
于 2012-07-17T13:12:07.407 に答える
32

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

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
于 2013-12-10T23:44:18.063 に答える
23

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

これは、IISセキュリティに関する非常によく説明された回答です

お役に立てれば

于 2012-01-11T15:05:03.733 に答える
14

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

于 2016-02-24T15:59:20.777 に答える
9

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

または、古いスタイルに移行して、ID を Network Service に設定し、Network Service ユーザーにパスへのアクセスを許可することもできます。

于 2014-08-21T08:11:26.200 に答える
5

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

于 2012-01-11T15:04:45.893 に答える
5

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

パスを確認して、パス+ファイル名を指定してください

System.IO.File.WriteAllBytes("path", bytearray);
于 2018-11-16T14:21:16.333 に答える
4

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

同じことを打ちました。ファイルが非表示になっていないことを確認してください。

于 2012-06-28T20:16:51.920 に答える
3

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

于 2014-07-03T14:26:55.870 に答える
3

このエラーが発生し、すぐに解決しました。すべてのフォルダが読み取り専用になっている理由がわかりません。読み取り専用を解除して適用しました。ただし、まだ読み取り専用です。だから私はファイルをルートフォルダに移動しました、それは動作します - とても奇妙です。

于 2016-06-21T02:51:04.470 に答える
2

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

ファイルと_ Combine_ _FileName = ""

上記のように問題となるものではPath Directoryなくなりますfile

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

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
于 2016-06-21T09:57:36.287 に答える
2

System.IO.File.OpenWrite(path) を使用しようとしていました

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

于 2019-01-22T19:03:52.657 に答える
1

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

于 2013-07-19T19:31:12.613 に答える
1

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

于 2013-07-22T20:20:30.137 に答える
0

サーバーへの展開後にこれを実行しようとすると、私も同じ問題に直面しました。

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の許可を与えたところ、問題は解決しました。

于 2012-02-01T12:14:40.290 に答える
0

フォルダーを移動または作成した後、フォルダーの名前を非常に迅速に変更しようとすると、このエラーがスローされました。

簡単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);      
   }   
}
于 2014-09-18T20:42:19.543 に答える
0

私は同じ問題を抱えており、ファイルが保存されるパーティションを変更することで問題を解決できました。そのため、5 行目で @"C:\" を @"D:\" に変更し、問題を解決しました。

static void SaveVideoToDisk(string link)
{
    var youTube = YouTube.Default; // starting point for YouTube actions
    var video = youTube.GetVideo(link); // gets a Video object with info about the video
    File.WriteAllBytes(@"D:\" + video.FullName, video.GetBytes());
}
于 2021-04-30T08:25:10.157 に答える
0

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

ここに画像の説明を入力

Thread.Sleep(5000)afterを使用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());
        }
    }
}
于 2018-08-21T06:37:42.653 に答える
0

Visual Studio 2017からに移行した後Visual Studio 2019、 で適切に実行される 2 つのアプリケーションで 2 つの例外に直面しましたVisual Studio 2017

  • System.UnauthorizedAccessException
  • System.ArgumentException

2 つのアプリケーションの実行可能ファイルを の許可されたアプリケーションに追加する必要があることがわかりましたAvast Antivirus

于 2021-10-12T10:31:17.867 に答える