【问题标题】:How to get files from ressources folder to copy them in an other directory in C#?如何从资源文件夹中获取文件以将它们复制到 C# 中的其他目录中?
【发布时间】:2012-07-03 22:49:00
【问题描述】:

您好,我想知道是否可以从 ressources 文件夹中提取文件以在我尝试过的那一刻将其复制到目录中:

    protected void Form1_Load(object sender, EventArgs e)
    {
            FileInfo info = new FileInfo(file);
            info.CopyTo(PATH + "\\shell" + "\\" + file, true);
            Bitmap bmp = (Bitmap)Properties.Resources.ResourceManager.GetObject(file);
            Image bitmap = Bitmap.FromFile(Environment.GetFolderPath   (Environment.SpecialFolder.Desktop) + "ConnectableCORR\\ApplicationConnectTable\\Resources\\teapot.jpg");
            bitmap.Save(Path.GetDirectoryName(PATH + "\\shell" + "\\" + "thumbnail_3D.png"), System.Drawing.Imaging.ImageFormat.Png);
     }

但是副本不起作用是我做错了什么吗?

最好的问候。

【问题讨论】:

  • 如您所见,我正在制作的 CopyTo 不起作用,我会尝试保存。
  • "CopyTo"如果源文件不存在或目的地错误会产生异常,你可以在我的回复中看到。
  • 请开始编写更简洁的代码。使用Path.Combine() 组合路径和文件名以避免重复的反斜杠。你的资源目录是哪个目录?您确定您没有将该文件夹与嵌入式资源混淆(因为您还使用了 ResourceManager)?为什么将目录名称作为需要文件名的参数传递?给我们一些关于使用的变量类型的提示(filePATH)。

标签: c# copy directory


【解决方案1】:

对象“Image”的方法“Save”需要“filename”中的文件名,您正在发送:

Path.GetDirectoryName(PATH + "\\ shell" + "\\" + "thumbnail_3D.png")

Path.GetDirectoryName

会返回:

PATH + "\\ shell" + "\\"

文件名会失败,您还应该包括文件名。

编辑

试试这个并检查路径:

FileInfo info = new FileInfo(file);
MessageBox.Show(string.Format("File '{0}' exist '{1}'", info.FullName, info.Exists));

var destinationFile = string.Format("{0}\\shell\\{1}", PATH, file);
info.CopyTo(destinationFile, true);

MessageBox.Show(string.Format("File '{0}' exist '{1}'", destinationFile, File.Exists(destinationFile)));

【讨论】:

    【解决方案2】:

    我将专注于info.CopyTo() 调用,因为这是复制文件的两个选项中更好的方法。正如它所写的那样,它为什么不起作用有多种可能性。对于我正在考虑的所有事情,都会引发异常,因此您应该能够在代码周围添加 try-catch 块并调试以查看错误是什么。这是我最好的猜测,按照我尝试调试它们的顺序:

    1. 什么是file?是文件名吗?它是完整路径加文件名吗?在我看来,您的代码希望它在一个地方是完全限定的,而在另一个地方只是名称。
    2. 源文件不存在。在尝试复制文件之前,我会快速info.Exists 确认文件存在。
    3. 确保输出文件名有意义。如果file 包含路径,那么您可能确实想要执行info.CopyTo(PATH + "\\shell\\" + info.Name, true),除非您想在输出路径中包含源路径。
    4. 输出目录不存在。如果是这种情况。 DirectoryNotFoundException 将被抛出。检查目录是否存在并在执行 CopyTo 之前创建它。
    5. 错误的文件名。可能包含无效字符,这将导致 ArgumentExceptionNotSupportedException
    6. 路径太长。可能不是这个,但会抛出一个PathTooLongException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2016-07-14
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多