0

我在使用 FileSavePicker 时遇到问题。

我一直认为,当您选择现有文件的名称时,FileSavePicker 会替换文件。它甚至会询问“已经有一些具有该名称的文件,您要替换它吗?” 当你点击保存。

在我的程序的后续步骤中,我打开 StorageFile 并向其写入一个流。我的程序工作得很好,当新流比当前流长时,但会创建损坏的文件,当它更短时(当然在文件末尾留下一些不会被覆盖或删除的字节)。

所以我的问题是:如何执行 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());

是的。当新文件大于以前的文件时,它可以正常工作。当您进入文件保存选择器时,选择一个文件并单击“保存”它甚至会询问您是否要替换文件,所以我想,它实际上会替换文件...:/

谢谢你的帮助!

可能的文件访问模式

4

1 回答 1

1

您打开它ReadWrite保留以前的内容。为了截断,您需要强制转换为 aFileRandomAccessStream然后将其设置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();
于 2015-03-06T15:55:29.070 回答