Файл.Копия и WPF - PullRequest
       30

Файл.Копия и WPF

2 голосов
/ 14 июня 2009

У меня небольшая проблема с методом File.Copy в WPF, мой код очень прост, и я получаю исключение при его запуске,

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 ]

2 голосов
/ 15 июня 2009

Если вы используете абсолютный вместо относительного пути, тогда он будет работать?

2 голосов
/ 14 июня 2009

Существует ли папка с изображениями? File.Copy не создает его автоматически.

Вы знаете, какой у вас текущий каталог? Окно открытия / сохранения файла может изменить это. Поэтому всегда безопаснее работать с абсолютными путями.

Do

Path.GetFullPath(filename)

и посмотрите, куда это указывает. Это правильное место?

1 голос
/ 15 июня 2009

Прежде чем получить доступ к файлу, вы должны вызвать System.IO.File.Exists (). Из вашего описания ошибки не ясно, существует ли исходный файл или нет до копирования.

Если вы не укажете абсолютный путь, ваш относительный путь часто будет определяться из неожиданных мест, обычно текущего рабочего каталога процесса. Вызов этого метода может сказать, что процесс запущен:

System.IO.Directory.GetCurrentDirectory ()

Вы никогда не должны делать предположений о текущем рабочем каталоге запущенного процесса, так как пользователь может запустить вашу программу откуда угодно. Даже если вы думаете, что всегда контролируете текущий рабочий каталог, вы будете удивлены, как часто вы будете ошибаться.

0 голосов
/ 04 декабря 2014

Необходимо встроить все внешние файлы в исполняемый файл и изменить свой код для работы с этими встроенными файлами, а не ожидать файлы на диске.

Чтобы использовать изображения или файлы, которые вам нужны («xml / txt / doc»), вам нужно установить для встроенного ресурса действие по сборке вашего файла и вызвать метод с полным именем файла, где имя собрано так:

[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);
   }
0 голосов
/ 10 июня 2011

используйте \\ для каталога пути к файлу, если он локальный .. если ваш файл существует по сетевому пути, используйте \\\\ (atfirst) .. Чтобы найти сетевой диск ..

Спасибо

0 голосов
/ 15 июня 2009

У вас есть отладчик? Почему бы не вставить точку останова и проверить значения, используемые на каждом шаге?

Если файловая система говорит "не удается найти файл", я бы не стал спорить с этим ...

...