我当前的方法是获取当前文件夹中的顶级文件,然后检查文件是否包含指定的文件名:
public async Task<bool> FileExists(StorageFolder folder, string fileName)
{
IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync();
StorageFile existFile = fileList.First(x => x.Name == fileName);
return (existFile != null);
}
有没有简单有效的方法来做到这一点?
答案 0 :(得分:2)
您可以考虑使用StorageFile.Path获取文件 - 但在这种情况下,您必须在上面的MSDN链接上查找功能和备注 - 如果文件不存在则会引发异常你必须抓住它。这取决于您的需求,文件夹中的文件数量以及是否必须深入到文件夹中。
我会像你一样使用你的方法 - 除了它返回布尔值:
public async Task<bool> FileExists(StorageFolder folder, string fileName)
{
return (await folder.GetFilesAsync()).Any(x => x.Name == fileName);
}
当然结果将是very similar给你的。
您可以轻松扩展此方法以检查一组文件:
public async Task<bool[]> FilesExists(StorageFolder folder, IEnumerable<string> listFileNames)
{
var files = await folder.GetFilesAsync();
return listFileNames.Select(x => files.Any(y => y.Name == x)).ToArray();
}
该方法适用于Windows运行时应用程序,Silverlight使用File.Exists method like in this answer。
答案 1 :(得分:2)
您需要熟悉System.IO.File库。
string Directory = "C:\\Users\\" + Environment.UserName + "\\Desktop\\" + DateTime.Today.ToString("yyyy-MM-dd") + "-ExampleFolder";
if (!Directory.Exists(Directory))
{
System.IO.Directory.CreateDirectory(Directory);
}
string NameOfFile = "Example.txt";
string FilePath = System.IO.Path.Combine(Directory, NameOfFile);
if (System.IO.File.Exists(FilePath))
{
//System.IO.File.Delete(FilePath);
}
玩上面的代码。
更改Directory和NameOfFile的值以查看会发生什么。
注意:System.IO.File是.Net的一部分,这意味着上述代码也适用于Windows应用程序和网站。
有任何问题,请询问。
答案 2 :(得分:1)
对于Windows Phone 8.1 RT,我建议您使用try..catch,并且不要将抛出的异常等同于布尔值,因为此时不知道该文件是否存在。
bool IsFileKnownToExist = false;
bool IsFileKnownToNotExist = false;
string FileName = "?";
try
{
await folder.GetFileAsync(FileName);
IsFileKnownToExist = true;
}
catch(Exception ex)
{
//handle exception and set the booleans here.
}
一旦我能掌握一系列例外情况,我将重新审视这一点,然后将有一个改进的方式来等同于真或假。
但是,应该返回第三个结果,表示不知道文件是否存在。在这种情况下,值得设置一个枚举:
public static enum Success
{
True,
False,
Unsure
}
然后您可以使用以下代码:
Success IsFileKnownToExist = Success.Unsure;
string FileName = "?";
try
{
await folder.GetFileAsync(FileName);
IsFileKnownToExist = Success.True;
}
catch(Exception ex)
{
//handle exception and set the booleans here.
}
switch(IsFileKnownToExist)
{
case Success.True:
//Code here when file exists
break;
case Success.False:
//Code here when file does not exist
break;
default:
case Success.Unsure:
//Code here when it isn't known whether file exists or not
break;
}
答案 3 :(得分:0)
检查文件是否存在的简单方法是:
static async Task<bool> DoesFileExistAsync(StorageFolder folder, string filename) {
try {
await folder.GetFileAsync(filename);
return true;
} catch {
return false;
}
}
这适用于WP8.1运行时。