C# WinForm 解除资源文件的占用并删除
1.删除未解除占用的资源时
2.调用Windows API函数 解除文件占用
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess,
uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
uint dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool DeleteFile(string lpFileName);
const uint GENERIC_WRITE = 0x40000000;
const uint OPEN_EXISTING = 3;
const uint FILE_SHARE_READ = 0x00000001;
const uint FILE_SHARE_WRITE = 0x00000002;
/// <summary>
/// 解除文件并删除文件
/// </summary>
/// <param name="filePath">文件路径</param>
private static void RelieveDeleteFile(string filePath)
{
IntPtr fileHandle = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
if (fileHandle != IntPtr.Zero && fileHandle != new IntPtr(-1))
{
bool success = CloseHandle(fileHandle);
if (success)
{
success = DeleteFile(filePath);
if (success)
{
Console.WriteLine("文件已被释放并删除。");
}
else
{
Console.WriteLine("文件释放成功,但无法删除。");
}
}
else
{
Console.WriteLine("无法释放文件。");
}
}
else
{
Console.WriteLine("文件已经处于可删除状态。");
DeleteFile(filePath);
}
}
调用
// 调用示例
string filePath = "C:\\test.txt";
RelieveDeleteFile(filePath);
结果
标签:
WinForm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)