Копирование и вставка файлов от имени пользователя

#c# #wpf

Вопрос:

В моем приложении есть несколько файлов. Который я хочу иметь возможность копировать и вставлять в другое место приложения.

Файл, который я хочу скопировать и вставить, я сохранил внутри функции GetPartialExportString()

Моя Идея:

  • Когда пользователь нажимает «Копировать», я создаю один файл где-нибудь на компьютере и сохраняю его внутри нового созданного файла
  • Когда пользователь нажимает «Вставить», я читаю файл, созданный при нажатии кнопки «Копировать», и добавляю его туда.
     MemoryStream destinationStream = new MemoryStream();  
    protected void CopyCommand()
    {
        var modelAsString = GetPartialExportString();
        
        string fileName = "copy.xaml";
        string targetPath = @"C:Users";
        string destFile = System.IO.Path.Combine(targetPath, fileName);

        //System.IO.Directory.CreateDirectory(targetPath);

        // convert string to stream
        byte[] byteArray = Encoding.UTF8.GetBytes(modelAsString);
        MemoryStream readingStream = new MemoryStream(byteArray);

        FileStream file = new FileStream(fileName, FileMode.Create, FileAccess.Write);

        readingStream.WriteTo(file);
        file.Close();
        readingStream.Close();

        readingStream.CopyTo(destinationStream);

        File.WriteAllText(destFile, modelAsString);
    }

    protected void PasteCommand()
    {
            string importString = File.ReadAllText("d:\temp.txt");
            LoadUnitFromXamlString("d:\temp.txt");
    }
 

Это так не работает. Новичок в этом, если кто-то может помочь, я был бы признателен!

На данный момент маршруты файлов неверны. Но даже когда они были нормальными, это не работало!

Комментарии:

1. зачем беспокоиться streams о (с которым вы, вероятно, не знакомы), если у вас уже есть файл. Копия ? так что теперь вам нужны только имена файлов.

Ответ №1:

  1. Вам следует избегать переопределения Close() метода Stream класса для MemoryStream / FileStream объектов. Используйте Dispose() вместо этого.
  2. Сначала вы должны выполнить всю работу с потоковыми объектами, а затем избавиться от них.
  3. После того , как вы скопировали содержимое readingStream объекта в file , вам придется изменить положение буфера потока в начало содержимого, присутствующего в readingStream объекте, чтобы успешно скопировать его destinationStream .

Измените свой фрагмент кода следующим образом:

 readingStream.WriteTo(file);

readingStream.Position = 0;
readingStream.CopyTo(destinationStream);

file.Dispose();
readingStream.Dispose();

File.WriteAllText(destFile, modelAsString);