如何知道指定的路径是否引用现有文件?

时间:2014-05-20 07:53:01

标签: windows-phone-8.1

我当前的方法是获取当前文件夹中的顶级文件,然后检查文件是否包含指定的文件名:

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);
}

有没有简单有效的方法来做到这一点?

4 个答案:

答案 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运行时。