File.Copy和WPF

时间:2009-06-14 17:53:44

标签: c# wpf file-copying

我对WPF中的File.Copy方法有点问题,我的代码很简单,运行时出现异常,

Could not find a part of the path 'Images\37c31987-52ee-4804-8601-a7b9b4d439fd.png'.

其中Images是相对文件夹。

这是我的代码,因为我说简单,相同的代码在控制台应用程序中工作正常,完全没问题。

string filenamae = System.IO.Path.Combine(images, Guid.NewGuid().ToString() + System.IO.Path.GetExtension(imageFile)); ;
System.IO.File.Copy(imageFile, filenamae);
this.ImageLocation = string.Empty;

所以如果有任何可以帮助的话,谢谢。

6 个答案:

答案 0 :(得分:2)

图像文件夹是否存在? File.Copy不会自动创建它。

你知道你当前的目录是什么吗?文件打开/保存框可以改变它。因此,使用绝对路径始终更安全。

做一个

Path.GetFullPath(filename)

并查看指向的位置。它是正确的位置吗?

答案 1 :(得分:2)

如果你使用绝对路径而不是相对路径,它会起作用吗?

答案 2 :(得分:1)

在访问文件之前,应该调用System.IO.File.Exists()。从错误描述中不清楚原始文件是否存在于复制之前。

如果未指定绝对路径,则通常会从意外位置(通常是流程的当前工作目录)解析相对路径。调用此方法可能会告诉您当前正在运行的进程:

System.IO.Directory.GetCurrentDirectory()

您永远不应该假设正在运行的进程的当前工作目录,因为用户可以从任何地方启动您的程序。即使你认为你总是控制当前的工作目录,你也会惊讶于你经常出错。

答案 3 :(得分:0)

你有调试器吗?为什么不插入断点并检查每个步骤使用的值?

如果文件系统说“找不到文件”,我就不会费心争论......

答案 4 :(得分:0)

使用\\作为文件路径目录,如果它在本地..如果你的文件存在于网络路径中使用\\\\(atfirst)..那么它寻找网络驱动器..

由于

答案 5 :(得分:0)

有必要将所有外部文件嵌入到可执行文件中,并更改代码以使用这些嵌入式文件,而不是期望磁盘上的文件。

要使用图像或任何您需要的文件(“xml / txt / doc”),您需要将文件的构建操作设置为Embedded Resource,并使用文件的完全限定名称调用该方法,其中名称汇总如下:

[RootNameSpaceOfTheProject]。[NameOfFolderInTheProject]。[FileNameWithExtension]

示例:

enter image description here

调用方法:

var b = ResourceOperations.GetResourceAsByteArray(“Store.Resources.EmbeddedIcons.toolbox.png”); 现在,您可以将字节数组写入临时文件,并将其用作图像源,或者直接从字节数组构建图像。至少,你有你的数据......

要将这些文件保存到磁盘,我们应该编写@ Jon Skeet代码:

 public static void CopyStream(Stream input, Stream output)
 {
     // Insert null checking here for production
     byte[] buffer = new byte[8192];

     int bytesRead;
     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
     {
         output.Write(buffer, 0, bytesRead);
     }
  }

然后调用它:

   using (Stream input = assembly.GetManifestResourceStream(resourceName))
   using (Stream output = File.Create(path))
   { 
      CopyStream(input, output);
   }