【问题标题】:C# moving files functionC#移动文件功能
【发布时间】:2015-09-24 17:42:00
【问题描述】:

我开始想知道如何在 pc 中操作文件,我认为最简单的开始应该是将所有文件从一个文件夹移动到另一个文件夹,尽管研究所有 microsoft 页面都使用了示例要移动的指定文件。所以我尝试了代码的实现(简单地从目录中删除指定的文件),但它似乎不起作用,你们能给我一个如何使用 File.Move() 或 Directory 的例子吗?移动()函数移动文件夹中的所有文件?顺便说一句,我是一个初学者,所以不要抛出充满未知内容的大量代码:P

我尝试了一个简单的方法: 编辑:

using System;
using System.IO;

class Test 
{
    public static void Main() 
    {
        string path = @"C:\TESTmove\Location";
        string path2 = @"C:\TESTmove\Destination";

        if (Directory.Exists(path))
        {

                Directory.Move(path, path2);

        }


        Console.ReadKey ();
    }
}

好的,所以现在我没有创建目标文件夹。它执行,将文件移动到目标文件夹并拆除位置文件夹。如何修复该删除?

【问题讨论】:

  • 向我们展示您的尝试,这真的不是请求服务的示例,我们会帮助您修复您的代码,但我们不会为您编写。 MSDN 文档在File.CopyFile.MoveDirectory.GetFiles 方法上非常清楚(甚至还有示例)。
  • 那么什么不起作用?你能努力帮助我们吗?
  • 好的,你认为“当文件已经存在时无法创建文件”是什么意思?
  • 如果 path2 已经存在,你会得到一个 IOException。查看文档msdn.microsoft.com/en-us/library/…
  • 有人告诉我它试图创建一个名为“destination”的文件夹,但由于它已经存在而无法创建

标签: c# function file directory move


【解决方案1】:

来自documentation

(抛出)IOException [...] 当 destDirName 已经存在时。

在使用Move 之前确保目标目录不存在。如果您想签入代码,您可能需要使用Exists 方法。

其实我们已经有了这个here on SO

【讨论】:

  • 好的,我明白了:P,我在路径中声明了目标文件夹,但我没有创建它。也这样做了。执行了我的程序,它删除了我的位置文件夹..我不需要那个
  • 否...您应该检查 path2 是否已经存在。如果是这样,你不想移动任何东西。如果没有,请继续您的行动。类似if(! Directory.Exists(path2)) { Directory.Move(path, path2); }
  • 您为什么不检查文档并了解该方法的实际工作原理以及从中可以得到什么? “现在我没有创建我的目标文件夹。它执行,将文件移动到目标文件夹并拆除位置文件夹”甚至没有意义。
  • ok 所以这个方法在移动文件时会自动删除位置文件夹。所以显然它不适合我。我需要一种移动文件夹内部并保留它的方法。
【解决方案2】:

这是Cannot create a file when that file already exists when using Directory.Move 的副本。问题是path2指定的目录已经存在。

【讨论】:

  • 我如何发布更大的帖子,而不是评论?
  • 您可以回答自己的问题或编辑您的问题。
【解决方案3】:

每个 MSDN:https://msdn.microsoft.com/en-us/library/system.io.directory.move(v=vs.110).aspx

Directory.Move() 会抛出 IOException 有很多原因,其中之一是

destDirName 已经存在。

你可能想做的事情是这样的:

public static void MoveFiles(string sourceDir, string destDir) 
{
    string[] files = Directory.GetFiles(sourceDir);

    foreach(string file in files)
    {
        string dest = file.Replace(sourceDir, destDir);

        if (!File.Exists(dest))
            File.Move(file, dest);          
    }
}

这是一个接受 2 个字符串参数的方法;包含所有文件的源目录和要将文件移动到的目标目录。

它抓取一个数组,其中包含 sourceDir 中每个文件的完整路径。

接下来,它遍历这个数组,并为每个字符串中的 destDir 切换出 sourceDir(只保留文件名本身),并仅在目标不存在时将其移动到目标。

请注意,我没有包括任何检查来验证源/目标目录是否存在。您可以自行研究如何执行此操作,并决定是否希望应用程序退出或创建这些目录或其他什么。

一个好的经验法则是,如果您遇到异常,请检查您的代码的哪一行具体引发了异常,并查阅 MSDN 页面以了解这些对象和方法以了解它们的作用、它们引发的异常,以及为什么。如果使用调试器并自己单步调试没有帮助,这可以帮助您确定代码崩溃的原因。

【讨论】:

    猜你喜欢
    • 2018-04-12
    • 2022-01-02
    • 2015-05-10
    • 2021-12-19
    • 2013-07-08
    • 2014-05-18
    • 2020-10-19
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多