【问题标题】:How to Avoid "Used by another process" When using File.Copy in C#在 C# 中使用 File.Copy 时如何避免“被另一个进程使用”
【发布时间】:2012-03-21 07:52:05
【问题描述】:

我正在尝试使用以下代码将文件从路径复制到另一个路径:

 File.Copy(oldPath, newPath);.

newPath 表示路径和文件名,如C:\txt.txt

oldPath 表示路径和文件名,如d:\d.txt

我得到以下异常:

C:\txt.txt 从另一个进程使用

为什么会出现这个问题?

【问题讨论】:

  • 抛出什么异常,抛出异常时oldPath和newPath有什么?
  • “被另一个进程使用” - 听起来你需要文件锁?
  • 是的,谢谢@ChristoferEliasson ..请您投票支持我的问题

标签: c# process copy


【解决方案1】:

可能会发生八种潜在异常:UnauthorizedAccessException、ArgumentException、ArgumentNullException、PathTooLongException、DirectoryNotFoundException、FileNotFoundException、FileNotFoundException、IOException 或 NotSupportedException(请参阅位于 http://msdn.microsoft.com/en-us/library/c6cfw35a.aspx 的 MSDN 文档以查找这些异常的详细信息)。

您表示该文件已被创建它的进程锁定。那应该可以解决您的问题:

using (FileStream fs = File.Create("c:\\michal.txt")) 
{ 
}

File.Copy("c:\\michal.txt", "c:\\michal_new.txt");

File.Delete("c:\\michal.txt");
File.Delete("c:\\michal_new.txt");

【讨论】:

  • 发生未处理的异常,进程无法访问文件“C:\...\n.jpg”,因为它正被另一个进程使用
  • Visual Studio 锁定了我的文件,因为我在同一个过程中使用它在新路径中添加文件,然后再尝试删除或复制它.. 所以也许 Myquestion 如何关闭由 file.Copy(oldpath,新路径);声明?
  • 感谢 Michal,但编译器抛出异常未处理异常已发生,因为进程无法访问文件 "c:\\michal_new.txt",因为它正被另一个进程使用
【解决方案2】:

原因通常是因为来自 Windows 的程序之一正在使用您尝试复制的文件——在我的情况下,Visual Studio cs 使用的文件在调试文件中......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2015-03-25
    • 2013-08-30
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多