現在、Windows 10 UWPアプリに取り組んでいます。アプリは、特定のPDF「01-introduction」と呼ばれるファイルが存在するかどうかを確認する必要があります。その場合は開きます。私が現在持っているもの:
try
{
var test = await DownloadsFolder.CreateFileAsync("01-Introduction.pdf", CreationCollisionOption.FailIfExists);
}
catch
{
}
ここにファイルが存在するかどうかを確認するために、ファイルを作成しようとするため、このコードは正しく機能しません。ただし、ファイルがまだ存在しない場合は、空のファイルが作成されます。ファイルが存在しない場合は何も作成しません。存在する場合はPDFを開きます。
可能であれば、「マイマニュアル」と呼ばれるダウンロードフォルダー内のフォルダーを探したいと思います。
どんな助けも大歓迎です。
public async Task<bool> isFilePresent(string fileName)
{
var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
return item != null;
}
ただし、Win8/WP8.1はサポートしていません
2つの方法があります
1)StorageFolder.GetFileAsync()
を使用できます。これはWindows 8.1およびWP 8.1デバイスでもサポートされています。
try
{
StorageFile file = await DownloadsFolder.GetFileAsync("01-Introduction.pdf");
}
catch
{
Debug.WriteLine("File does not exits");
}
2)または、Windows 10 UWPでのみサポートされているFileInfo.Exists
を使用できます。
FileInfo fInfo = new FileInfo("01-Introduction.pdf");
if (!fInfo.Exists)
{
Debug.WriteLine("File does not exits");
}
System.IO.File.ExistsもUWP方式です。今、Windows IOTでテストします。それだけで動作します。
これは私の場合に役立ちました:
ApplicationData.Current.LocalFolder.GetFileAsync(path).AsTask().ContinueWith(item => {
if (item.IsFaulted)
return; // file not found
else { /* process file here */ }
});
これは、Windows 10でUWP C#アプリを実行するのに役立ちました...
StorageFolder app_StorageFolder = await StorageFolder.GetFolderFromPathAsync( @App.STORAGE_FOLDER_PATH );
var item = await app_StorageFolder.TryGetItemAsync(relative_file_pathname);
return item != null;
public override bool Exists(string filePath)
{
try
{
string path = Path.GetDirectoryName(filePath);
var fileName = Path.GetFileName(filePath);
StorageFolder accessFolder = StorageFolder.GetFolderFromPathAsync(path).AsTask().GetAwaiter().GetResult();
StorageFile file = accessFolder.GetFileAsync(fileName).AsTask().GetAwaiter().GetResult();
return true;
}
catch
{
return false;
}
}
Win10 IoT Core UWPアプリを実行していますが、CreateFileAsync()
はすでに空のファイルスタブをすぐに作成するため、 "Exists"ではなくファイル長を確認する必要があります。しかし、ファイルが置かれるパス全体を決定する前に、その呼び出しが必要です。
っていうことは:
var destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("MyFile.wow", ...);
if (new FileInfo(destinationFile.Path).Length > 0)
return destinationFile.Path;
System.IO.Fileを使用できます。例:
// If file located in local folder. You can do the same for other locations.
string rootPath = ApplicationData.Current.LocalFolder.Path;
string filePath = Path.Combine(rootPath, "fileName.pdf");
if (System.IO.File.Exists(filePath))
{
// File exists
}
else
{
// File doesn't exist
}
このようにSystem.IO.File.Exists(filePath)
は_KnownFolders.DocumentsLibrary.Path
_が空の文字列を返すため、DocumentLibrary
をテストできません
次の解決策は非常に遅いawait DownloadsFolder.GetFileAsync("01-Introduction.pdf")
私見の最良の方法は、フォルダからすべてのファイルを収集し、ファイル名が存在することを確認することです。
_List<StorageFile> storageFileList = new List<StorageFile>();
storageFileList.AddRange(await KnownFolders.DocumentsLibrary.GetFilesAsync(CommonFileQuery.OrderByName));
bool fileExist = storageFileList.Any(x => x.Name == "01-Introduction.pdf");
_