ファイルを削除しようとしているのに例外が発生するという問題があります。
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行
何か案は?
私も問題を抱えていたので、私はこの記事につまずいた。コピー/削除の前後に、次のコード行を追加しました。
削除
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
コピー
File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
によると File.Deleteメソッド ...
UnauthorizedAccessException
は4つのうちの1つを意味します:
これは古い問題ですが、検索中に私はそれに遭遇しました。 SaveAsの保存パスに実際のファイル名コンポーネントがないことがわかりました...
string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
ユーザーがWebサイトに接続しようとすると、IISはIUSER_ComputerNameアカウントに接続を割り当てます。ここで、ComputerNameはIISは実行中です。既定では、IUSER_ComputerNameアカウントはGuestsグループのメンバです。このグループにはセキュリティ上の制限があります。そのフォルダへのIUSER_ComputerNameへの壮大なアクセスを試みる
ここで はIIS securityに関する回答として非常に優れています
お役に立てれば
宛先がファイルであることを認識していなかったため、エラーが発生しました。 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
についても同じことが言えます
Visual Studioを右クリックし、管理者として実行をクリックします。
これが問題のあるIIS Webサイトである場合は、そのサイトまたはアプリケーションが使用するアプリケーションプールの詳細設定のIdentityプロパティを確認してください。 ApplicationPoolIdentityに設定されていることがわかりますが、その場合はパスにアクセスする必要があるユーザーになります。
または、古いスタイルにして、IDをネットワークサービスに設定し、ネットワークサービスユーザーにパスへのアクセス権を付与することもできます。
I/Oエラーまたは特定の種類のセキュリティエラーのためにオペレーティングシステムがアクセスを拒否したときにスローされる例外。
私は同じことにぶつかりました。ファイルが隠されていないことを確認してください。
あなたは/ save toから削除しようとしているフォルダの権限を変更する必要があります。含まれているフォルダーを右クリックし、「セキュリティー」タブを使用して、アプリケーションが実行されているユーザーに変更変更権限を許可します。
I/Oエラーまたはセキュリティエラーのためにオペレーティングシステムがアクセスを拒否した場合、UnauthorizedAccessException例外がスローされます。
ファイルまたはレジストリキーにアクセスしようとしている場合は、それが読み取り専用ではないことを確認してください。
私はこのエラーに遭遇し、ほんの一瞬でそれを解決しました。フォルダがすべて読み取り専用になっている理由がわかりません。読み取り専用をキャンセルして適用します。ただし、それでも読み取り専用です。それで私はファイルをルートフォルダに移動しました、それは働きます - とても変です。
私にとっても同じ問題、私はファイルではなくフォルダを指していました。
だからパスで確認し、パス+ファイル名を指定
System.IO.File.WriteAllBytes("path", bytearray);
コードから共有フォルダのパスにアクセスしようとしている場合は、セキュリティタブを介して物理フォルダに適切な権限を付与するだけでよいことに注意してください。また、共有タブを使用して、フォルダを対応するアプリプールユーザーと「共有」する必要があります。
私のウィンドウサービスが例外を投げ始めたときにも私はこの問題に直面しています
System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.
そこで解決策として、私は自分のサービスに関連するユーザーアカウントをチェックしました、以下のスクリーンキャプチャーに示すように
だから私の場合それはNETWORK SERVICEでした
次に、フォルダのプロパティに移動して、関連付けられているユーザーアカウントが[アクセス許可]タブにも存在するかどうかを確認します。それは私の場合には欠けていました、そして私がそれを追加したとき、それは私の問題を修正しました。
詳細については、以下のスクリーンショットを確認してください。
ファイルを削除するときに私は正確なエラーがありました。それはフォルダのフルコントロールを持っていたにもかかわらず共有フォルダから.pdfドキュメントを削除することができなかったサービスアカウントの下で走っているWindowsサービスでした。
私にとってうまくいったのは、共有フォルダ>詳細設定>共有>追加のセキュリティタブに移動することでした。
その後、管理者グループにサービスアカウントを追加して変更を適用すると、サービスアカウントはそのフォルダ内のすべてのファイルに対してすべての操作を実行できました。
ファイルのプロパティを確認してください。読み取り専用がチェックされている場合は、チェックを外します。これは私のUnauthorizedAccessExceptionに関する個人的な問題です。
共有サーバー上の新しく移動したWebサイトでも同じ問題がありました。 Webホストパネル(DotNetPanel)をtrueに設定して「書き込み許可を許可」することで解決しました。そのため、すべてのコードを確認する前に共有サーバーを使用している場合は、サーバー構成を確認する価値があり、時間を大幅に節約できます。
私はこのエラーに直面していた
ファイル名とFileName = ""
でパスをCombine
にするとき
それはfile
ではなくPath Directory
になります。これは上記の のように問題です
だからあなたはこのようにFileName
をチェックする必要があります
if(itemUri!="")
File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
私の特定のケースでは、私は10000個のフォルダを繰り返し作成および削除していました。問題は、Directory.Delete(path, true)
メソッドが返すにもかかわらず、根底にあるOSのメカニズムがディスクからファイルを削除している可能性があるということにあると思われます。そして、古いフォルダを削除した直後に新しいフォルダを作成しようとすると、まだ完全には削除されていないためにロックされているフォルダもあります。そして、私はSystem.UnauthorizedAccessException: "パスへのアクセスが拒否されました"を取得しています。
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());
}
}
}
コロン(:)文字がないか、ドライブ文字の後にない場合は、まずパスを確認してください。コロンが欠けていない場合は、そのパスにアクセス/書き込み許可が付与されているかどうかを確認できます。私は同じ問題を抱えていたと私はコロン、許可を欠けていただけで、他のすべては大丈夫だった。
C:\folderpath
うまくいきますが、
C\folderpath .........(missing colon)
アクセス拒否エラーが発生します。
あなたがBitDefenderを使っているなら、セーフファイル機能があなたの操作をブロックする可能性が高いです。これは、より高度なバージョンのいくつかに付属しているRansomware保護の形式です。
あなたのアプリケーションにBitDefenderのアクセスを許可して、もう一度やり直してください。
さらに詳しい情報は このBitDefenderサポートページ にあります。
このエラーはデザインモードではなく発生する可能性がありますか。実行モード... .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ファイルを作成しようとしなくなります。
私はSystem.IO.File.OpenWrite(path)を使おうとしていました
そしてOpenWrite()にディレクトリへのパスを渡しているだけなのでうまくいきませんでしたが、書き込みたいファイルへのパスがすべて必要です。したがって、UnauthorizedAccessExceptionを回避するために、末尾のfilename.extensionを含むフルパスをOpenWriteに渡す必要があります。
フォルダを移動または作成した後でフォルダの名前を非常に速く変更しようとしたときに、このエラーが発生しました。
簡単な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);
}
}
私は、サーバーに配置した後にこれを実行しようとしたときにも同じ問題に直面しました。
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の権限を許可しましたが、問題は解決しました。
UWP(Universal Windows)アプリケーションを作成しようとしている人にとっては、ファイルのパーミッションはもっと制限されており、一般にデフォルトでは拒否されています。また、システムユーザーのアクセス許可よりも優先されます。あなたは基本的にどちらかのファイルにアクセスするだけです。
詳細については、こちらを参照してください。=> https://docs.Microsoft.com/ja-jp/windows/uwp/files/file-access-permissions