繁体   English   中英

File.Copy和WPF

[英]File.Copy and WPF

我在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;

因此,如果有什么可以帮助的,谢谢。

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

您知道当前目录是什么吗? 文件打开/保存框可以更改此设置。 因此,使用绝对路径总是更安全。

做一个

Path.GetFullPath(filename)

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

如果您使用绝对路径而不是相对路径,那么它行得通吗?

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

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

System.IO.Directory.GetCurrentDirectory()

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

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

要使用图像或任何您需要的文件(“ xml / txt / doc”),您需要将文件的构建操作设置为“嵌入式资源”,并使用文件的完全限定名称调用该方法,并在其中汇编名称像这样:

[RootNameSpaceOfTheProject] [NameOfFolderInTheProject]。[FileNameWithExtension]

例:

在此处输入图片说明

调用方法:

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);
   }

如果文件路径目录位于本地,则使用\\\\作为文件路径目录。如果您的文件存在于网络路径中,请使用\\\\\\\\(第一)。以便它查找网络驱动器。

谢谢

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

如果文件系统显示“找不到文件”,那么我就不用理会它了……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM