52245


以下のようなコードでダウンロードフォルダーにファイルを作成しています。

[code]

    var newFile = await DownloadsFolder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);
    
[/code]

ファイル名が重複したときには自動的に別名になるので良いのですが、その前にすでにファイルが存在するかをチェックして警告表示しようと思っています。

どのようにすれば DownloadsFolder でのファイル存在チェックができるのでしょうか？

  * ターゲット: UWP (Windows10, version 1809)
  * 開発環境: VisualStudio 2017

* * *

(2019-02-03 追記)

## System.IO.File.Exists() を使用した方法

ApplicationData.Current.LocalFolder
では成功しますが、DownloadsFolderは権限がないようで期待した結果になりません。

  * DownloadsFolder のパスを取得する方法がない (CreateFileしてそのパスを得ることはできる)
  * DownloadsFolder では System.IO.File.Exists() が常に false を返す。
  * DownloadsFolder では System.IO.Directory.GetFiles() はUnauthorizedAccessException例外になる

DownloadsFolder は出力に特化したものということで、直接のファイル存在チェックは難しいように思えてきました。


CC BY-SA 4.0
2019-01-23T06:18:48.037
52241
2019-02-03T13:25:26.643
2019-02-03T11:55:33.610
14817
14817
question
c# uwp
DownloadsFolder でのファイル存在チェックの方法は？


`CreationCollisionOption` パラメータに `GenerateUniqueName` の代りに `FailIfExists`
を指定してみてはどうでしょう。  
例外が発生したら、警告で選択肢表示し、選ばれた対処を行うとか。

[CreationCollisionOption Enum](https://docs.microsoft.com/en-
us/uwp/api/windows.storage.creationcollisionoption)

> Fields  
>  FailIfExists 2  
>  ファイルまたはフォルダがすでに存在する場合はSystem.Exception型の例外を発生させます。  
>  CreationCollisionOption列挙から明示的に値を渡さないメソッドは、ファイルまたはフォルダを  
>  作成、名前変更、コピー、または移動しようとするときに、FailIfExists値をデフォルトとして  
>  使用します。


CC BY-SA 4.0
2019-01-23T06:42:01.770
52245
2019-01-23T06:42:01.770
26370
52241
answer


下記でダウンロードフォルダーの場所を取得できるようです。  
<https://code.i-harness.com/ja/q/7513c6>

取得でできたらfileNameにパス＋ファイル名をセットし

[code]

    if (System.IO.File.Exists(fileName))
    {
        MessageBox.Show("'" + fileName + "'は存在します。");
    }
    
[/code]

でどうでしょうか？


CC BY-SA 4.0
2019-02-03T09:57:38.940
52512
2019-02-03T13:25:26.643
2019-02-03T13:25:26.643
14817
24490
52241
answer