如果使用 CreationCollisionOption.ReplaceExisting,则下载文件夹崩溃



我创建了一个文件,我希望该文件自动保存到用户的"下载"文件夹中。所以我用了:

StorageFile file = await DownloadsFolder.CreateFileAsync("filename.txt");

但是,如果我再次创建该文件,则会收到一条错误消息,指出该文件已存在。所以我用了:

StorageFile file = await DownloadsFolder.CreateFileAsync("filename.txt", CreationCollisionOption.ReplaceExisting);

但是,这也会导致错误崩溃,指出参数不在预期范围内。但是如果我使用:

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("filename.txt", CreationCollisionOption.ReplaceExisting);

然后,即使文件存在,它也会创建文件,但我需要将文件创建/保存在"下载"文件夹中,以便用户更轻松地访问。我想到了这个(尝试的)解决方案,因为这里描述的问题阻止我向某些电子邮件客户端添加附件。

该方法CreateFileAsync (String)使用 FailIfExists 选项作为默认值。因此,当您再次创建该文件时,您会收到一条错误消息,指出该文件已存在。

有关详细信息,请参阅创建碰撞选项。

DownloadsFolder.CreateFileAsync("filename.txt", CreationCollisionOption.ReplaceExisting)方法崩溃,并显示错误,指出参数不在预期范围内。

由于应用只能访问它创建的"下载"文件夹中的文件,因此无法为此参数指定 OpenIfExists 或 ReplaceExists。

请参阅DownloadsFolder.CreateFileAsync(String, CreationCollisionOption)文档的参数部分(最后一段)。

您可以使用DownloadsFolder.CreateFileAsync("filename.txt", CreationCollisionOption.GenerateUniqueName)创建文件。如果文件或文件夹已存在,它可以自动将数字附加到指定名称的基数。

如果要覆盖下载文件夹中的现有文件。可以使用 FileSavePicker.PickSaveFileAsync 返回为表示保存的文件而创建的 storageFile 对象,并使用FileIO.WriteTextAsync(IStorageFile, String)方法将文本写入指定的文件。它可以覆盖旧文件。

例如:

FileSavePicker savePicker = new FileSavePicker();
savePicker.SuggestedStartLocation = PickerLocationId.Downloads;
savePicker.FileTypeChoices.Add("Simple Line Files", new List<string>() { ".txt" });
savePicker.SuggestedFileName = "filename";
StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
    await FileIO.WriteTextAsync(file, "hello");
}

最新更新