c# - 如果文件大小为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 文件,而其他文件仍在显示?
解决方案
您的代码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
变量没有填充数据,则必须事先发生异常。
推荐阅读
- linux - 网络错误:AWS EC2 实例中的连接被拒绝
- c# - 是否可以在没有设置器的情况下在属性中设置值?
- python - 在 while 循环中复制到 Postgres
- python - Pygame 碰撞检测无法正常工作
- c++ - 重载运算符 - 无法在赋值中将对象转换为基类型
- c# - C# - 存储变量和用户设置(变量和设置的数量未预定义)
- wordpress - 有没有办法将 wordpress 项目从 Windows 机器转移到 Mac?
- c - OpenMp C 文件输出
- javascript - 使用 Google Pay JavaScript API 时防止客户端篡改
- laravel - 如何在服务实现中进行数据表自然排序?