Windowsストアアプリにファイルが存在するかどうかを確認する他の方法はありますか?
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
//no exception means file exists
}
catch (FileNotFoundException ex)
{
//find out through exception
}
この投稿 で受け入れられた答えによると、現時点では他に方法はありません。ただし、File IOチームは、例外をスローする代わりにnullを返すようにAPIを変更することを検討しています。
リンクされた投稿からの引用:
現在、ファイルが存在するかどうかを確認する唯一の方法は、FileNotFoundExceptionをキャッチすることです。明示的なチェックがあり、開始が競合状態であることが指摘されているように、APIが追加されたファイルが存在するとは思わない。 File IO team(私はそのチームにいないので、確かにわかりませんが、これは私が聞いたことです))は、このAPIがスローする代わりにnullを返すことを検討していると考えていますファイルが存在しない場合。
これは古いかもしれませんが、彼らがあなたにこれに近づく方法を変えたようです。
ファイルを作成してから、ファイルが既に存在する場合は元に戻すことを試みます。 ここ はそのドキュメントです。これは、この問題に対するGoogle検索の最初の結果であったため、これを更新しています。
そのため、私の場合、ファイルを開くか、存在しない場合は作成する必要があります。ファイルを作成し、既に存在する場合はそれを開きます。そのようです:
save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);
Shashank Yerramilliによるこのブログ投稿に出くわしました。
Windows Phone 8でこれをテストしましたが、動作します。ただし、Windowsストアではテストしていません
ここに答えをコピーしています
Windowsの場合RT app:
public async Task<bool> isFilePresent(string fileName)
{
var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
return item != null;
}
Windows Phone 8の場合
public bool IsFilePresent(string fileName)
{
return System.IO.File.Exists(string.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName);
}
Microsoftは、Windows 8.1のStorageFileに新しい機能を追加して、ユーザーエンジニアがファイルにアクセスできるかどうかを判断できるようにしました。 IsAvailable
このような古いWin32呼び出しを使用して、ディレクトリが存在するかどうかをテストできます。
GetFileAttributesExW(path, GetFileExInfoStandard, &info);
return (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? false: true;
デスクトップおよびメトロアプリで動作します: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa364946%28v=vs.85%29.aspx
チェックする他の手段は、ローカルフォルダ内のファイルを取得することです
var collection = ApplicationData.Current.LocalFolder.GetFilesAsync()
このメソッドを使用して、コレクション内のすべての要素を反復処理し、その可用性を確認します。
Dim myPath As StorageFolder
If (From i In Await KnownFolders.MusicLibrary.GetFoldersAsync() Where i.Name = "PodBong").Count = 1 Then
myPath = Await KnownFolders.MusicLibrary.GetFolderAsync("PodBong")
Else
myPath = Await KnownFolders.MusicLibrary.CreateFolderAsync("PodBong")
End If
私は古いトリックを使って自分で書いてみました:
全体として、例外処理メソッドにこだわる方が良いでしょう。
8.1はこのようなものを得た、私はそれが働いてみました。
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.TryGetItemAsync("mytext.txt") as IStorageFile;
if (file == null)
{
//do what you want
}
else
{
//do what you want
}
Try GetItemAsync のドキュメントには、「この例はファイルの存在を確認する方法を示しています。」このAPIは、その目的を果たすために公式に意図されているようです。