我在使用FileSavePicker时遇到问题。
我一直认为,当您选择现有文件的名称时,FileSavePicker将替换该文件。它甚至要求#res;已经有一些带有该名称的文件,你想要替换它吗?"当你点击保存时。
在我的程序的后续步骤中,我打开StorageFile并向其写入一个流。 当新流比CURRENT流更长时,我的程序工作正常,但是当它更短时会创建损坏的文件(当然,在文件末尾留下一些不会被覆盖或删除的字节)。 / p>
所以我的问题是:如何强制执行FileSavePicker的替换机制?
FileSavePicker filePicker = new FileSavePicker();
filePicker.SuggestedFileName = "Some File Name";
filePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
filePicker.FileTypeChoices.Add("Pdf File", new List<string>(){ ".pdf" });
StorageFile saveFile = await filePicker.PickSaveFileAsync();
然后我将SaveFile作为参数提供给新类。这使用iTextSharp创建了一个pdf文档。
var stream = await saveFile.OpenAsync(FileAccessMode.ReadWrite);
doc = new Document();
writer = new PdfCopy(doc, stream.AsStream());
所以是的。当新文件比以前大时,它工作正常。 当你到达文件保存选择器时,选择一个文件并单击&#34;保存&#34;它甚至问你,如果你想替换文件,所以我想,它实际上会替换文件......:/
感谢您的帮助!
答案 0 :(得分:1)
您为ReadWrite
打开它,保留以前的内容。要截断,您需要转换为FileRandomAccessStream
,然后将Size
设置为零:
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".txt");
var file = await picker.PickSingleFileAsync();
var stream = (await file.OpenAsync(FileAccessMode.ReadWrite)) as FileRandomAccessStream;
stream.Size = 0;
var writer = new DataWriter(stream.GetOutputStreamAt(0));
writer.WriteString("Hello\r\n");
await writer.StoreAsync();