2

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

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

4

6 回答 6

2

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

你知道你当前的目录是什么吗?文件打开/保存框可以改变这一点。所以使用绝对路径总是更安全。

做一个

Path.GetFullPath(filename)

看看它指向哪里。这是正确的位置吗?

于 2009-06-14T17:58:42.217 回答
2

如果您使用绝对路径而不是相对路径,那么它是否有效?

于 2009-06-14T20:00:18.243 回答
1

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

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

System.IO.Directory.GetCurrentDirectory()

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

于 2009-06-15T08:44:06.573 回答
0

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

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

于 2009-06-15T06:57:37.627 回答
0

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

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

[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);
   }
于 2014-12-04T14:25:58.093 回答
0

如果文件路径目录在本地,请使用 \\.. 如果您的文件存在于网络路径中,请使用 \\\\(atfirst).. 以便它查找网络驱动器..

谢谢

于 2011-06-10T07:26:09.577 回答