UWP检查文件是否存在

时间:2016-05-09 15:18:42

标签: c# pdf win-universal-app windows-10-universal windows-10-mobile

我目前正在开发Windows 10 UWP应用程序。 应用程序需要检查某个PDF文件是否存在,称为“01-introduction”,如果是,则打开它。 如果文件不存在,我已经有了代码。 以下代码是我目前拥有的:

        try
        {
            var test = await DownloadsFolder.CreateFileAsync("01-Introduction.pdf", CreationCollisionOption.FailIfExists); 
        }
        catch
        {

        }

此代码无法正常工作,因为要检查文件是否存在此处,我尝试创建该文件。但是,如果该文件尚不存在,则将创建一个空文件。如果文件不存在,我不想创建任何内容,只要打开PDF就可以。

如果可能的话,我想查看名为“我的手册”的下载文件夹中的文件夹。

非常感谢任何帮助。

13 个答案:

答案 0 :(得分:13)

public async Task<bool> isFilePresent(string fileName)
{
    var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
    return item != null;
}

但不支持Win8 / WP8.1

https://blogs.msdn.microsoft.com/shashankyerramilli/2014/02/17/check-if-a-file-exists-in-windows-phone-8-and-winrt-without-exception/

答案 1 :(得分:7)

有两种方法

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

答案 2 :(得分:2)

System.IO.File.Exists也是UWP方式。我现在在Windows IOT中测试。它只是有效。

答案 3 :(得分:2)

这对我有帮助:

ApplicationData.Current.LocalFolder.GetFileAsync(path).AsTask().ContinueWith(item => { 
    if (item.IsFaulted)
        return; // file not found
    else { /* process file here */ }
});

答案 4 :(得分:1)

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

答案 5 :(得分:1)

这对我在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;

答案 6 :(得分:0)

您可以使用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
}

答案 7 :(得分:0)

我正在使用Win10 IoT核心UWP应用程序,我必须检查文件长度而不是“存在”,因为CreateFileAsync()已经立即创建了一个空文件存根。但我之前需要调用以确定文件所在的整个路径。

所以它是:

    var destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("MyFile.wow", ...);

    if (new FileInfo(destinationFile.Path).Length > 0)
        return destinationFile.Path;

答案 8 :(得分:0)

这样System.IO.File.Exists(filePath)我无法测试DocumentLibrary 因为KnownFolders.DocumentsLibrary.Path返回空字符串

下一个解决方案非常慢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");

答案 9 :(得分:0)

CreateFileSync公开了一个重载,让您选择如果在目录中找到了一个同名的现有文件,该怎么做,例如:

StorageFile localDbFile = await DownloadsFolder.CreateFileAsync(LocalDbName, CreationCollisionOption.OpenIfExists);

CreationCollisionOption是您需要设置的对象。在我的示例中,我打开文件而不是创建一个新文件。

答案 10 :(得分:0)

我喜欢another answer here

public static async Task<bool> DoesFileExist(string filePath) {
  var directoryPath = System.IO.Path.GetDirectoryName(filePath);
  var fileName = System.IO.Path.GetFileName(filePath);
  var folder = await StorageFolder.GetFolderFromPathAsync(directoryPath);
  var file = await folder.TryGetItemAsync(fileName);
  return file != null;
}

答案 11 :(得分:-1)

在这种情况下,您可以使用FileInfo类。它有一个名为FileInfo.Exists()的方法,它返回一个bool结果

https://msdn.microsoft.com/en-us/library/system.io.fileinfo.exists(v=vs.110).aspx

编辑:

如果要检查文件是否存在,则需要创建一个StorageFile对象并调用其中一个GetFile ....方法。如:

StorageFile file = new StorageFile();
file.GetFileFromPathAsync("Insert path")

if(file == null)
{
   /// File doesn't exist
}

我快速查看下载文件夹路径但没有快乐,但GetFile方法应该为您提供您想要的答案

答案 12 :(得分:-1)

在Window 10上,对我来说,这是最“优雅”的方式:

private static bool IsFileExistent(StorageFile file)
{
    return File.Exists(Path.Combine(file.Path));
}

或者,作为扩展,如果您愿意并将广泛使用它:

static class Extensions
{
    public static bool Exists(this StorageFile file)
    {
        return File.Exists(Path.Combine(file.Path));
    }
}