C# 如果文件大小为0kb,则它不会显示在gridview上,文件将被删除
我有一个显示一些文件的gridview。如果文件大小为0 kb,则不显示和删除该文件,而仍显示其他文件 代码:C# 如果文件大小为0kb,则它不会显示在gridview上,文件将被删除,c#,image,gridview,uwp,C#,Image,Gridview,Uwp,我有一个显示一些文件的gridview。如果文件大小为0 kb,则不显示和删除该文件,而仍显示其他文件 代码: 如果我使用上面的代码,那么如果存在大小为0 kb的文件,则不会显示所有文件。如何仅获取未显示和删除的0 kb文件,而其他文件仍在显示?您的代码在循环中重复设置项资源,这效率较低,但不应影响结果-即使存在一些大小为0的文件,也应跳过它们并设置“实际”值文件应导致数据源更新 我关注的是: thumbFile = await cover.GetFileAsync(file.DisplayNa
如果我使用上面的代码,那么如果存在大小为0 kb的文件,则不会显示所有文件。如何仅获取未显示和删除的0 kb文件,而其他文件仍在显示?您的代码在循环中重复设置
项资源,这效率较低,但不应影响结果-即使存在一些大小为0的文件,也应跳过它们并设置“实际”值文件应导致数据源
更新
我关注的是:
thumbFile = await cover.GetFileAsync(file.DisplayName.ToString() + ".jpg");
thumbFile = await cover.GetFileAsync( Path.GetFileNameWithoutExtension( file.Name ) + ".jpg" );
已知,DisplayName
属性有时会返回文件名,包括
分机。我建议使用以下方法:
thumbFile = await cover.GetFileAsync(file.DisplayName.ToString() + ".jpg");
thumbFile = await cover.GetFileAsync( Path.GetFileNameWithoutExtension( file.Name ) + ".jpg" );
Name
属性返回文件的全名,因此如果应用Path.GetFileNameWithoutExtension
,扩展名肯定会被删除,因此结果将是您想要的
如果这没有帮助,请将catch
表达式更改为catch(Exception ex)
,然后在catch
块内放置一个断点,因为如果datasource
变量没有填写数据,必须事先发生异常。因为您已经设置了this.itemGridView.ItemsSource=datasource代码>当pro.Size!=0
尝试使用此代码
StorageFolder cover = await komik.GetFolderAsync("cover");
List<StorageFile> deletedFileList = new List<StorageFile>();
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;
}
catch
{
}
}
else
{
deletedFileList.Add(file);
}
}
// display the data source.
this.itemGridView.ItemsSource = datasource;
// delete the file
foreach(var temp in deletedFileList)
{
try
{
await temp.DeleteAsync();
}
catch(IOException)
{
}
}
storagefoldercover=wait komik.GetFolderAsync(“cover”);
List deletedFileList=新列表();
foreach(sortedfiles中的存储文件)
{
bool bukuada=真;
Buku Buku=新的Buku();
buku.Judul=file.DisplayName.ToString();
BasicProperties pro=await file.getBasicProperties异步();
如果(专业尺寸!=0)
{
StorageFile thumbFile=文件;
尝试
{
thumbFile=await cover.GetFileAsync(file.DisplayName.ToString()+“.jpg”);
BitmapImage bi=新的BitmapImage();
SetSource(wait thumbFile.OpenAsync(FileAccessMode.Read));
buku.Cover=bi;
datasource.Add(buku);
loading.IsActive=false;
}
抓住
{
}
}
其他的
{
deletedFileList.Add(文件);
}
}
//显示数据源。
this.itemGridView.ItemsSource=数据源;
//删除该文件
foreach(deletedFileList中的var temp)
{
尝试
{
等待temp.DeleteAsync();
}
捕获(IOException)
{
}
}
您目前的代码有什么问题?难道你不需要添加一个else
,然后在其中删除文件吗?问题是如果有1个或一些0 kb的文件,那么所有文件都无法显示。我只希望0 kb的文件不显示,并且该文件已被删除代码>在foreach循环之后。将datasource
定义为ObservableCollection:ObservableCollection datasource=new ObservableCollection()
并移动行this.itemGridView.ItemsSource=datasource代码>出foreach循环(例如,就在它之前)。然后,您的GridView应该会自动更新,而无需重置ItemsSource。我收到一条错误消息:“List”不包含“DeleteAsync”的定义,并且找不到接受“List”类型的第一个参数的扩展方法“DeleteAsync”(是否缺少using指令或程序集引用?)@Rose@Rose我修好了。