C# 保存后如何检查文件是否存在?

C# 保存后如何检查文件是否存在?,c#,uwp,C#,Uwp,我在一个UWP应用程序中工作,在某个时刻,用户有机会保存图像(完成),现在我只让用户知道保存操作是通过“messageDialog”完成的,这是我的代码: var savePicker = new Windows.Storage.Pickers.FileSavePicker(); savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary

我在一个UWP应用程序中工作,在某个时刻,用户有机会保存图像(完成),现在我只让用户知道保存操作是通过“messageDialog”完成的,这是我的代码:

        var savePicker = new Windows.Storage.Pickers.FileSavePicker();
        savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
        
        savePicker.FileTypeChoices.Add("QR Code", new List<string>() { ".png", ".jpg", ".jpeg", ".jpe", ".bmp" });
        
        savePicker.SuggestedFileName = "QR_01";
        Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync();
        if (file != null)
        {
            
            Windows.Storage.CachedFileManager.DeferUpdates(file);
            
            await Windows.Storage.FileIO.WriteBytesAsync(file, _bytes3);
            
            Windows.Storage.Provider.FileUpdateStatus status = await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file);
            
            if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
            {
                var messageDialog = new Windows.UI.Popups.MessageDialog("File saved on: " + file.Path);

                await messageDialog.ShowAsync();
            }
            else
            {
                //this.textBlock.Text = "File " + file.Name + " couldn't be saved."; not defined by now
            }
            
            done = true;
        }
        else
        {
            this.textBlock.Text = "operation canceled";
            done = false;
        }
为了使用“GetFileAsync”检查文件或“FutureAccessList”以备将来访问,但由于我拥有对任何目录的文件访问权限,因此失败,因此我无法在此处使用任何解决方案:

我的问题是:

1.-是否有方法检查用户点击“保存”按钮后文件是否保存或成功写入

2.-“WriteBytesAsync”方法是否足以确保文件已保存??根据信息,它不会抛出任何异常

但是我想确定文件已经在“WriteBytesAsync”方法之后了

对于您的需求,您可以使用方法来获取该文件,如果该文件不为null,则表示该文件存在。请注意,如果您想使用上述方法,您需要添加
broadFileSystemAccess
功能,并在系统设置中打开它。有关更多信息,请参阅

“WriteBytesAsync”方法是否足以确保文件已保存


是的,
WriteBytesAsync
方法需要传递
StorageFile
参数。如果文件参数不为null,则表示它已在文件夹中创建。或者它将抛出空异常。

感谢您的回答,使用“GetFileFromPathAsync”可能会起作用,但是,使用“GetFolderFromPathAsync(savePath)”的情况与使用“GetFolderFromPathAsync(savePath)”的情况相同,因为我没有访问权限,正如您所说,我需要添加“broadFileSystemAccess”我不希望我提交的应用被拒绝,因为理由不好哈哈。是的,我想你的第二个问题已经指出了关键。当
PickSaveFileAsync
完成且返回值不为null时,该文件已在存储器中的中创建。如果出现问题,WriteBytesAsync将抛出。由于您拥有实际的文件,您可以在写入后将其读回以检查其是否存在,或者向Windows询问其文件大小并检查其是否为0字节。但是WriteBytesAsync完成应该足够了,因为写操作是事务性的,文件流在返回之前被刷新。对于任何处理FileIO和PathIO类的人,请参阅@JohnnyWestlake提供的非常有用的信息。谢谢
        string savePath = System.IO.Path.GetDirectoryName(file.Path);
        Windows.Storage.StorageFolder saveFolder = await Windows.Storage.StorageFolder.GetFolderFromPathAsync(savePath);
Windows.Storage.CachedFileManager.DeferUpdates(file);
await Windows.Storage.FileIO.WriteBytesAsync(file, new byte[3]);
var temp = await StorageFile.GetFileFromPathAsync(file.Path);
if(temp != null)
{

}
else
{

}