a525192407 2017-05-24 07:56 采纳率: 0%
浏览 4118

C#复制被其他程序占用的文件

我现在的思路就是 首先通过判断 文件是否被其他程序占用
被占用 通过文件 找到进程,然后杀掉进程,
杀掉进程后 复制文件
///
/// 判断文件是否被占用 vFileName为文件的路径+文件名称
///

public string IsUnlocker(string vFileName)
{
if (!File.Exists(vFileName))
{
return "Nofiles";
}
IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);
if (vHandle == HFILE_ERROR)
{
return "true";
}
CloseHandle(vHandle);
return "false";
}

///
/// 通过调用外部程序解除文件被占用,fileName为要检查被那个进程占用的文件

///
public void KillFiles(string fileName)
{
Process tool = new Process();
tool.StartInfo.FileName = "handle.exe";
tool.StartInfo.Arguments = fileName + " /accepteula";
tool.StartInfo.UseShellExecute = false;
tool.StartInfo.RedirectStandardOutput = true;
tool.Start();
tool.WaitForExit();
string outputTool = tool.StandardOutput.ReadToEnd();
string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
foreach (Match match in Regex.Matches(outputTool, matchPattern))
{
Process.GetProcessById(int.Parse(match.Value)).Kill();
}

}
///
///复制文件
///
public void CopyFolder(string strFromPath, string strToPath)
{
try
{...}

        catch
        {...}

}
复制文件的我就简写了

现在有没有更好方式可以 实现我现在想要的功能呢?

  • 写回答

2条回答 默认 最新

  • oyljerry 2017-05-24 09:01
    关注

    没有什么其他方法,文件被占用,只有进程退出了,你才能复制成功,要么就是你的方式暴力结束进程,不然就是返回错误信息。如同windows一样

    评论

报告相同问题?

悬赏问题

  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置