C++解除文件占用

DirectX修复工具使用技巧之二——手动修复C++创建失败的文件 最后更新:2021-2-25 随着V4.0正式版的发布,近来有部分用户来咨询如何解决C++文件创建失败的问题。在此我将以解决最常见的C++2015-2019文件创建失败为例,向大家演示一下在线修复的方法,其他C++或文件的方法大同小异。此次操作以Windows 7为例,其他系统相应参考即可。 首先,如果希望程序能手动在线修复创建失败的失败,请首先确定您使用的V4.0.2版或更高版本,老版本不支持此功能。查看程序版本的方式可以把鼠标放在DirectX Repair.e... 阅读详情

1.解除文件占用,其过程比较简单,当然在寻找这个过程还是吃了不少苦头的,首先呢,我们需要,遍历系统中所有的文件句柄该过程呢,就要是检测句柄类型,如果是28,则可以认为是文件,然后检测先该文件名是不是我们需要的,如果是我们需要的,则要记录下该句柄的ProcessId,然后再打开该进程,然后向该进程中注入远程线程,关掉该文件即可

现在呢,实现了,可以遍历系统中所有正在使用的文件


#include"stdafx.h"


#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <psapi.h>
#include <strsafe.h>
#include <assert.h>
#include<iostream>
#include<fstream>
using namespace std;
#pragma comment(lib,"PSAPI.LIB")
//#pragma comment(lib,"Ntoskrnl.lib")




typedef struct _IO_STATUS_BLOCK {
union {
NTSTATUS Status;
PVOID    Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;


typedef struct _SYSTEM_HANDLE
{
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE,*PSYSTEM_HANDLE;


typedef struct _SYSTEM_HANDLE_INFORMATION
{
ULONG NumberOfHandles;
SYSTEM_HANDLE HandleInfo[1];
}SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION;




typedef enum _SYSTEM_INFORMATION_CLASS {


SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemPathInformation, SystemProcessInformation, SystemCallCountInformation, SystemDeviceInformation, SystemProcessorPerformanceInformation, SystemFlagsInformation, SystemCallTimeInformation, SystemModuleInformation, SystemLocksInformation, SystemStackTraceInformation, SystemPagedPoolInformation, SystemNonPagedPoolInformation, SystemHandleInformation, SystemObjectInformation, SystemPageFileInformation, SystemVdmInstemulInformation, SystemVdmBopInformation, SystemFileCacheInformation, SystemPoolTagInformation, SystemInterruptInformation, SystemDpcBehaviorInformation, SystemFullMemoryInformation, SystemLoadGdiDriverInformation, SystemUnloadGdiDriverInformation, SystemTimeAdjustmentInformation, SystemSummaryMemoryInformation, SystemNextEventIdInformation, SystemEventIdsInformation, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemExtendServiceTableInformation, SystemPrioritySeperation, SystemPlugPlayBusInformation, SystemDockInformation, SystemProcessorSpeedInformation, SystemCurrentTimeZoneInformation, SystemLookasideInformation


} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;






typedef enum _FILE_INFORMATION_CLASS { 
FileDirectoryInformation                 = 1,
FileFullDirectoryInformation,
FileBothDirectoryInformation,
FileBasicInformation,
FileStandardInformation,
FileInternalInformation,
FileEaInformation,
FileAccessInformation,
FileNameInformation,
FileRenameInformation,
FileLinkInformation,
FileNamesInformation,
FileDispositionInformation,
FilePositionInformation,
FileFullEaInformation,
FileModeInformation,
FileAlignmentInformation,
FileAllInformation,
FileAllocationInformation,
FileEndOfFileInformation,
FileAlternateNameInformation,
FileStreamInformation,
FilePipeInformation,
FilePipeLocalInformation,
FilePipeRemoteInformation,
FileMailslotQueryInformation,
FileMailslotSetInformation,
FileCompressionInformation,
FileObjectIdInformation,
FileCompletionInformation,
FileMoveClusterInformation,
FileQuotaInformation,
FileReparsePointInformation,
FileNetworkOpenInformation,
FileAttributeTagInformation,
FileTrackingInformation,
FileIdBothDirectoryInformation,
FileIdFullDirectoryInformation,
FileValidDataLengthInformation,
FileShortNameInformation,
FileIoCompletionNotificationInformation,
FileIoStatusBlockRangeInformation,
FileIoPriorityHintInformation,
FileSfioReserveInformation,
FileSfioVolumeInformation,
FileHardLinkInformation,
FileProcessIdsUsingFileInformation,
FileNormalizedNameInformation,
FileNetworkPhysicalNameInformation,
FileIdGlobalTxDirectoryInformation,
FileIsRemoteDeviceInformation,
FileAttributeCacheInformation,
FileNumaNodeInformation,
FileStandardLinkInformation,
FileRemoteProtocolInformation,
FileReplaceCompletionInformation,
FileMaximumInformation
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;




typedef struct _FILE_NAME_INFORMATION {
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;




HANDLE hCopy;




typedef enum _OBJECT_INFORMATION_CLASS {


ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllInformation, ObjectDataInformation


} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;


typedef struct _LSA_UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR  Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING;






typedef struct _OBJECT_NAME_INFORMATION {


UNICODE_STRING Name; WCHAR NameBuffer[0];


} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
typedef long(__stdcall*PNtQueryObject)(HANDLE ObjectHandle,ULONG ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);




//声明Native API函数
typedef NTSTATUS (WINAPI *NTQUERYSYSTEMINFOMATION)(
IN SYSTEM_INFORMATION_CLASS SystemClass,
OUT LPVOID SystemInfo,
IN ULONG SystemInfoLength,
OUT PULONG ReturnLength
);








char filename[256]={0};




DWORD WINAPI GetFileName(LPVOID p )
{
int* ProcessId=(int*)p;
HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
if(hNtDll==NULL)
{
return 0;
}
PNtQueryObject NtQueryObject=(PNtQueryObject)GetProcAddress(hNtDll,"NtQueryObject");
POBJECT_NAME_INFORMATION pObject=NULL;
pObject=(POBJECT_NAME_INFORMATION)HeapAlloc(GetProcessHeap(),0,MAX_PATH*2);
memset(pObject,0,MAX_PATH*2);
ULONG returnLength;
DWORD dwReturn=NtQueryObject(hCopy,ObjectNameInformation,pObject,MAX_PATH*2,&returnLength);
//将卷路径名修改成盘符路径

if((pObject->NameBuffer!=NULL)&&(dwReturn==0))
{
DWORD n=WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,NULL,0,NULL,FALSE);
   char* name=new char[n+1];
memset(name,0,n+1);
WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,name,n,NULL,FALSE);
char tmp[256]={0};
sprintf(tmp,"%d",ProcessId);
if(strstr(name,filename))
{
cout<<"该进程ID 是"<<*ProcessId<<endl;
}
// cout<<name<<endl;
ofstream out("E:\\result.txt",ios::app);
out.write(name,strlen(name));
out.write("\n",strlen("\n"));
out.close();
delete[] name;
}
HeapFree(GetProcessHeap(),0,pObject);
return dwReturn;
}


//根据进程ID获取当前进程所使用的所有文件的句柄
void EnumFileHandle(DWORD pid)
{
HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
if(hNtDll==NULL)
{
return;
}
//开始获取,其他API地址
NTQUERYSYSTEMINFOMATION NtQuerySystemInformation=(NTQUERYSYSTEMINFOMATION)
GetProcAddress(hNtDll,"NtQuerySystemInformation");
if(NtQuerySystemInformation==NULL)
{
return;
}
//开始为我们需要信息开辟内存
DWORD nSize=4096,nReturn=0;
PSYSTEM_HANDLE_INFORMATION pHandleInfo=(PSYSTEM_HANDLE_INFORMATION) HeapAlloc(GetProcessHeap(),0,nSize);
while(NtQuerySystemInformation(SystemHandleInformation,pHandleInfo,nSize,&nReturn)==0xc0000004)
{
HeapFree(GetProcessHeap(),0,pHandleInfo);
nSize+=4096;
pHandleInfo=(PSYSTEM_HANDLE_INFORMATION)HeapAlloc(GetProcessHeap(),0,nSize);
}
//这样就开辟成功了
//然后打开指定的进程


DWORD dwFileCount=0;
for(ULONG i=0;i<pHandleInfo->NumberOfHandles;i++)
{
PSYSTEM_HANDLE pHandle=(PSYSTEM_HANDLE)&(pHandleInfo->HandleInfo[i]);


if((pHandle->ObjectTypeNumber==0x1c)&&(pHandle->ProcessId!=4))
{
//如果是当前进程的某个文件,这说明,该进程下有文件操作
HANDLE hProcess=OpenProcess(PROCESS_DUP_HANDLE|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pHandle->ProcessId);
if(hProcess==NULL)
{
int a=GetLastError();
// cout<<"OpenProcess "<<a<<endl;
continue;
}


if(!DuplicateHandle(hProcess,(HANDLE)pHandle->Handle,GetCurrentProcess(),&hCopy,MAXIMUM_ALLOWED,FALSE,0))
{
continue;
}
int curID=pHandle->ProcessId;
HANDLE hThread=CreateThread(NULL,0,GetFileName,(LPVOID)&curID,0,NULL);
if(WaitForSingleObject(hThread,100)==WAIT_TIMEOUT)
{
TerminateThread(hThread,0);
}
CloseHandle(hThread);
CloseHandle(hCopy);
hCopy=0;
CloseHandle(hProcess);
hProcess=0;
}
}
HeapFree(GetProcessHeap(),0,pHandleInfo);
}




bool EnableDebugPrivilege()   
{   
HANDLE hToken;   
LUID sedebugnameValue;   
TOKEN_PRIVILEGES tkp;   
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{   
return   FALSE;   
}   
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))  
{   
CloseHandle(hToken);   
return false;   
}   
tkp.PrivilegeCount = 1;   
tkp.Privileges[0].Luid = sedebugnameValue;   
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) 
{   
CloseHandle(hToken);   
return false;   
}   
return true;   
}
int main()
{
cout<<"请输入查找的文件名称"<<endl;
cin>>filename;
EnableDebugPrivilege();
HANDLE hFile1=CreateFile(L"D:\\2.txt", GENERIC_READ,0, NULL, OPEN_EXISTING, 0, NULL);
DWORD dwTmp;
WriteFile(hFile1,L"DASD",4,&dwTmp,NULL);
EnumFileHandle(::GetCurrentProcessId());
CloseHandle(hFile1);
system("pause");
return 0;
}




这样就能根据文件名称获得该文件所在的进程ID了,不足的是我们使用的是28,也就是32bit的win7的文件句柄类型,如果是其他系统,则应该注意修改之

C++判断目标文件是否被占用(独占)(附源码) 判断目标文件是否被占用(独占),提供了相关的封装函数,可以直接拿去使用。 阅读详情

相关推荐

看到文件被那个进程占用(VC)

能够知道文件被那个进程占用的VC源码,无法删除一个文件时绝对有用,值得收藏哦^_^

linux C++可执行文件运行后,为什么无法被替换?(Text file busy)“文件被锁定”(File Locking)、“文件占用”(File In Use)

另外,在某些情况下,可能需要在程序运行时动态加载和链接一些库,这些库可能位于可执行文件所在的目录中。如果删除可执行文件,那么这些库可能无法被正确加载和链接,从而导致程序无法正常运行。因此,在程序运行时,可以将可执行文件删除。但是,需要注意的是,如果程序在运行期间需要动态链接库或其他资源,那么这些资源必须仍然存在于计算机上,否则程序可能会出现运行时错误。因此,一般来说,为了保证程序的正常运行,最好在程序运行期间不要删除可执行文件,而是在程序退出后再进行删除。今天,跑程序的时候,想把可执行文件删除,提示。

Dontla的博客 1146

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 616

DirectX修复工具使用技巧之一——解除被占用的文件,完整修复C++

最后更新:2020-9-23 随着V4.0正式版的发布,近来有部分用户来咨询如何删除被占用的C++文件。在此我将以解决最常见的PC版QQ占用的3个C++2010文件(alt100.dll、msvcr100.dll、msvcp100.dll)为例,向大家演示一下操作方法,其他C++或文件的方法大同小异。此次操作以Windows10为例,其他系统相应参考即可。 首先,当C++修复失败时,如果想查看具体的错误信息,请首先确定您使用的V4.0增强版或更高版本,老版本不支持此...

VBcom的专栏 6万+

[LaTeX] 使用natbib宏包实现参考文献的“作者-年份”引用格式及常见编译错误排查

本文详细介绍了在LaTeX中使用natbib宏包实现参考文献“作者-年份”引用格式的完整流程。从宏包配置、.bib文件准备到标准编译步骤,重点解析了常见的“Bibliography not compatible with author-year”错误成因,并提供了彻底清理辅助文件等解决方案,帮助用户高效排版符合学术规范的参考文献。

moon9的博客 481

GEM5教程--gem5开始之旅(一)

GEM5系列教程--gem5开始之旅一、建立GEM5 GEM5模拟器是一个用于计算机系统结构研究的模块化平台,包含系统级别的结构以及处理器的微体系结构。读者若想详细的了解,请查看其官方文档GEM5文档 读者如果想要入门GEM5的话,可以参考Learning_GEM5这个网站,这里面有较为详细的教程,可以带读者从入门到精通。小编我对GEM5的入门学习也是从这个Learning_GEM5这个网站学习的...

qq_43381135的博客 3万+

C 文件/文件夹 解除占用工具

C# 文件/文件夹 解除占用工具 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个用于解除文件或文件夹占用的C#工具。该工具能够帮助用户在Windows系统中解除文件或文件夹的占用状态,并支持直接删除这些文件或文件夹。工具通过遍历文件夹中的所有文件,判断是否被占用,先解除文件占用,再解除文件夹占用,最后删除文件和文件夹。 功能特点 解除文件占用:能够检测并...

gitblog_09723的博客 497

Quartz定时任务调度框架中的Misfire策略实战解析

本文深入解析了Quartz定时任务调度框架中的Misfire(失火)处理策略。针对SimpleTrigger和CronTrigger两种常用触发器,详细对比了其各自的Misfire指令(如NowWithExistingCount、FireAndProceed等)的核心行为与适用场景,并提供了基于不同业务需求(如数据补跑、时间点敏感度)的实战选型指南,帮助开发者构建更健壮可靠的任务调度系统。

weixin_29250573的博客 75

解除文件占用

解除文件占用

qq_44952766的博客 634

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

go 打开文件句柄_技术版:文件被占用无法删除怎么办?

技术版:文件被占用无法删除怎么办?了解一点操作系统知识的同学们应该都知道,文件占用无法删除,是因为某些进程正在使用该文件。要删除这样的文件,就需要让那些进程关闭文件,然后自然可以删除。一句话的事,那究竟要怎么用代码来实现这个功能呢?打开和关闭文件还记得上大学第一门语言课-C语言,迄今为止还依然活跃并被一直使用的语言。比汇编容易理解,又更接近底层,所以Windows操作系统内核大部分代码都...

weixin_32529429的博客 990

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

【中科院一区Top-源码复现】Day-ahead photovoltaic power forecastingwith multi-source temporal-featureconvoluti

739

vc 解除文件占用

#include"stdafx.h" #include #include #include #include #include #include #include #include using namespace std; #pragma comment(lib,"PSAPI.LIB") //#pragma comment(lib,"Ntoskrnl.lib") typed

3124

BVH2SMPL 实战笔记

BVH2SMPL 实战笔记

jacke121的专栏 840

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

解除文件占用,解决文件被占用不能删除

相信每一个娃子都有这么个苦逼的时候—— “操作无法完成,因为文件已在***中打开,请关闭该文件并重试。”(***可以是系统组件、服务、程序等。) 这个时候娃子们一般会打开任务管理器苦逼地寻找。。。。 介个教程能让你摆脱这苦逼的信息。 本教程通过对资源监视器的利用解除文件占用,解决文件被占用不能删除的情况。 首先,在开始菜单搜索框中输入资源监视器,并回车。 在选项卡中选“cpu”。

灵魂之栖 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

windows端口解除占用

windows端口解除占用编写bat脚本解除占用修改格式 开发过程中经常遇到端口被占用问题,使用脚本解除占用 编写bat脚本解除占用 @Echo Off :: created by tarzan LIU SETLOCAL EnableDelayedExpansion for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set "DEL=%%a"

menxinziwen的博客 365

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

技术评测:FFXVIFix游戏性能优化工具的核心功能与性能提升分析

FFXVIFix是一款专为《最终幻想16》设计的游戏性能优化工具,通过底层引擎修改和运行时注入技术,为玩家提供全面的画面增强与帧率提升方案。该工具采用C++开发,基于安全钩子技术实现游戏引擎参数动态调整,有效解决了超宽屏适配、帧率限制、画面优化等核心问题。 ## 功能亮点与技术架构 ### 显示适配与画面优化技术 FFXVIFix的核心功能之一是消除超宽屏显示器黑边问题。通过修改游戏引擎的分

gitblog_00632的博客 820

已知文件被某进程占用,强行解除占用,并删除文件

BOOL GetVolumeNameByHandle(HANDLE hFile, LPTSTR szVolumeName, UINT cchMax) { BOOL bResult = FALSE; TCHAR szBuf[500] = { 0 }; TCHAR * pIter = szBuf; int i =0; BY_HANDLE_FILE_INFORMATION stFileInfo = { 0 }; do { if(FALSE == GetFileInformationByHa.

老狼的专栏 3893

使用 Win32Exts 进行 解锁被占用文件

Win32Exts 是一个支持多种脚本语言(VBS, JS, Lua, Python, Java)的 Win32 扩展库, 通过它,你能够像C/C++ 一般 调用任意系统或者第三方API,实现强大的功能需求。不仅如此,其还内置了非常丰富的功能模块,能够提供众多的特殊功能。 阅读本文首先推荐阅读以下文章: 《Lua 中 获取各种系统环境信息用法 for Win32Exts》 https://blog.youkuaiyun.com/tan_kaishu...

tan_kaishuai的专栏 754

如何实现cpp跨文件操作_在 Windows 里实现 6 个不为人知的文件操作

在 Windows 中处理文件时,我们经常会碰到一些很麻烦或是不容易解决的问题。光是「文件被占用删不掉」这一个情况,相信就有无数的朋友遭遇过。面对这些基础性的问题时,网上给出的方案却总是模棱两可。这里就介绍一些不为人知的文件操作。类似 macOS 的 Automator 和 LaunchBar,Windows 上也终于出现了一款像样的效率工具:Quicker。本文的每个动作都提供了相应的 Quic...

weixin_39630909的博客 216

windows@handle句柄@文件或目录被占用问题@查找占用者程序进程

介绍windows句柄关于文件占用问题解决方案。

xuchaoxin1375的博客 3416

Windows文件占用检测终极指南:用PowerToys File Locksmith快速解决文件锁定问题

你是否曾经遇到过这样的场景:想要删除一个文件,系统却提示"文件正在使用中";或者想要重命名某个文档,却被告知"操作无法完成"?这种文件被神秘进程锁定的情况,是Windows用户日常工作中最常见的烦恼之一。今天,我将为你详细介绍微软PowerToys套件中的**文件占用检测神器**——File Locksmith,这款免费工具能帮你快速定位并解决文件锁定问题。 ## 为什么文件会被锁定?了解文件占

gitblog_00165的博客 1032

Linux版cursor0.51.x内cpp插件功能异常

怀疑是cursor官方停止了对vs老版cpp插件的支持,之前保留的旧版cpp插件功能异常。

urnotuname的博客 1209

开源宝藏:Windows下轻松解决文件占用问题的神器

开源宝藏:Windows下轻松解决文件占用问题的神器 在Windows操作系统下,我们常常会遇到因某个进程占用文件而无法删除或修改该文件的烦恼。为了解决这一痛点,今天要向大家隆重推荐一款高效、便捷的开源工具——FreeFileHelper。这款工具基于MIT协议,旨在帮助开发者和普通用户轻松找到并终止那些“顽固”地占住文件不放的进程,从而释放文件锁,让你的操作畅通无阻。下面,让我们深入了解一下这个...

gitblog_00574的博客 614
上一篇: 查看文件被占用的进程 NtQueryObject NtQueryInformationFile NtQuerySystemInformation
下一篇: 总结eclipse中安装maven插件
鱼公子哟西
博客等级 码龄14年 17粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值