将文件从一个目录移动到另一个目录

3

我使用DotNetZip创建了一个压缩文件/文件夹。我想把这个文件从原始目录/文件夹移动到另一个目录,例如“我的文档”。到目前为止,我已经执行了以下操作,但它给出了一个错误,表示找不到路径的一部分。

private static void Move()
{
    try
    {
        Directory.Move(@"Debug\Settings.zip", IO.Paths.Enviroment.MyDocuments);
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

更新: 我已经尝试了一下,不是因为我修好了它而是因为它很奇怪。我使用了File.Move()Directory.Move(),并将both.Move(@"Debug\Settings.zip",...);更改为both.Move(@"Settings.zip",...);,然后会出现一个错误,说当该文件已存在时,无法创建文件。

目录树


2
当然,这并不特定于zip文件。 - wRAR
4个回答

2
虽然使用Directory.Move移动文件可能看起来很奇怪(我会使用File.Move代替),但Jean-Philippe Leclerc指出这样做是可行的。
问题在于路径Debug\Settings.zip
所有相对路径都是相对于工作目录的。默认情况下,工作目录是执行程序集(您的程序)的文件夹,而在调试时,它是项目的bin\Debug子文件夹。因此,您的路径Debug\Settings.zip会被扩展为类似以下的路径:
C:\..\MyProject\bin\Debug\Debug\Settings.zip

您的意思可能不是这样的。您的意思只是"Settings.zip"

它是ZIP文件的事实是无关紧要的。


3
根据官方文档,Directory.Move 可以用于文件:http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx - Jean-Philippe Leclerc
不知道这一点。现在我的问题是:既然 Directory.Move 已经做了你想要的事情,为什么你还想使用 File.Move 呢? - Daniel A.A. Pelsmaeker
因为使用Directory.Move时,当你只想移动一个文件时,可能会意外地将整个目录移动。所以File.Move可以防止人为错误。 - Jean-Philippe Leclerc
@Jean-PhilippeLeclerc - 你能解释一下“accidently”吗? - Parimal Raj
1
你知道,当“你意外地弄糊了整个事情”时。假设你有一些代码生成一些文件路径,但由于算法不好,最终生成的路径是一个目录。在这种情况下,你希望程序抛出异常,而不是移动你的目录。 - Jean-Philippe Leclerc
@Jean-PhilippeLeclerc - 收到,谢谢,我把它误认为其他东西了! - Parimal Raj

1
使用 System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 获取您的“我的文档”路径。

+1 我认为这应该是正确的答案,因为Directory.Move也适用于文件。 - Abdusalam Ben Haj
-1:问题不在于我的文档路径。首先,他从我们都不知道的某个位置(Paths.Enviroment.MyDocuments)获取它,很可能是一个字符串,否则它就不会起作用。其次,问题出在另一个参数上。 - Daniel A.A. Pelsmaeker
1
@Virtlink 字符串Paths.Enviroment.MyDocumentsSystem.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),我刚刚通过创建自己的Enviroment类并返回静态字符串来简化了我的生活,用于获取“我的文档”路径。另一部分@"Debug\Settings.zip是指Visual Studio项目的Debug文件夹。在Debug文件夹中有一个名为Settings的文件夹,我将其压缩了。我只想要将已压缩的文件夹移动到另一个位置,这种情况下就是我的文档。 - iwatakeshi

1
“找不到路径的一部分” - 错误似乎是由于您文件“Settings.Zip”的相对路径不是有效路径引起的!
你需要使用File.MoveDirectory.Move会将整个目录内容移动到不同的文件夹中。 File.Move:仅将文件移动到指定位置。
private static void Move()
        {
            try
            {
                File.Move(@"Debug\Settings.zip", System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

嗯,显然Directory.Move也会移动文件。 :P - Daniel A.A. Pelsmaeker
@Virtlink - 它们之间唯一的区别是,File.Move无法处理目录移动操作! - Parimal Raj
应用程序保存在“Debug”文件夹中吗? - Parimal Raj
我仍然没有在屏幕快照中看到Settings.zip文件! - Parimal Raj
@AppDeveloper 是的。至于那个 .zip 文件,我已经删除了,因为我一直在试错来找出问题所在。但是,最终我解决了它。请看下面的答案。 - iwatakeshi
显示剩余4条评论

0

问题已经被修复! 首先 "Debug\Settings.zip" 应该是 "Settings.zip" 或者 @"Settings.zip",最后目标应该不仅仅是 System.IO.File.Move(@"Settings.zip", System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop)); 而是 System.IO.File.Move(@"Settings.zip", System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + @"\Settings.zip"); 基本上就是在目标字符串的末尾添加文件名和文件扩展名.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接