#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:
- Вам следует избегать переопределения
Close()
методаStream
класса дляMemoryStream
/FileStream
объектов. ИспользуйтеDispose()
вместо этого. - Сначала вы должны выполнить всю работу с потоковыми объектами, а затем избавиться от них.
- После того , как вы скопировали содержимое
readingStream
объекта вfile
, вам придется изменить положение буфера потока в начало содержимого, присутствующего вreadingStream
объекте, чтобы успешно скопировать егоdestinationStream
.
Измените свой фрагмент кода следующим образом:
readingStream.WriteTo(file);
readingStream.Position = 0;
readingStream.CopyTo(destinationStream);
file.Dispose();
readingStream.Dispose();
File.WriteAllText(destFile, modelAsString);