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

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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器