首页 > 解决方案 > 如果文件大小为0kb,gridview上不显示,文件被删除

问题描述

我有一个显示一些文件的gridview。我想如果文件大小为0 kb,那么文件不显示和删除,而其他文件仍然显示代码:

StorageFolder cover = await komik.GetFolderAsync("cover");
foreach (StorageFile file in sortedfiles)
{
    bool bukuada = true;
    Buku buku = new Buku();
    buku.Judul = file.DisplayName.ToString();
    BasicProperties pro = await file.GetBasicPropertiesAsync();
    if (pro.Size != 0)
    {
        StorageFile thumbFile = file;
        try
        {
            thumbFile = await cover.GetFileAsync(file.DisplayName.ToString() + ".jpg");
            BitmapImage bi = new BitmapImage();
            bi.SetSource(await thumbFile.OpenAsync(FileAccessMode.Read));
            buku.Cover = bi;

            datasource.Add(buku);
            loading.IsActive = false;
            this.itemGridView.ItemsSource = datasource;
        }
        catch
        {

        }
    }
}

如果我使用上面的代码,那么如果有一个大小为 0 kb 的文件,则不会显示所有文件。如何仅获取未显示和删除的 0 kb 文件,而其他文件仍在显示?

标签: c#imagegridviewuwp

解决方案


您的代码ItemsSource在循环中重复设置,效率较低,但不应该影响结果 - 即使有一些大小为 0 的文件,它们也应该被跳过并且“实际”文件应该导致datasource更新。

我关心的是以下几点:

thumbFile = await cover.GetFileAsync(file.DisplayName.ToString() + ".jpg");

众所周知,该DisplayName属性有时会返回包含 扩展名的文件名。我建议宁愿使用以下内容:

thumbFile = await cover.GetFileAsync( Path.GetFileNameWithoutExtension( file.Name ) + ".jpg" );

Name属性返回文件的全名,所以如果我们 apply Path.GetFileNameWithoutExtension,扩展名肯定会被删除,所以结果会是你想要的。

如果这没有帮助,请将catch表达式更改为catch ( Exception ex ),然后在catch块内放置一个断点,因为如果datasource变量没有填充数据,则必须事先发生异常。


推荐阅读