首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Directory.GetFiles获取文件的顺序

1.1、由于文件顺序导致的Bug

在使用Directory.GetFiles(stringpath,stringsearchPattern, SearchOption searchOption)通过传入的路径,获取该路径下的对应文件的完整名称(包含路径和后缀)的数组;

获取的数组中名称排序,按照window下根据文件名排序来逐一添加;即使在Window对应路径下将排列顺序修改为非名称排列(比如按照修改日期),该操作只影响在window下文件的排列顺序;

就是说Directory.GetFiles()始终按照文件名排列的方式获取传入路径下的文件名;

在程序初始化时会读取一次该路径下文件,然后存储到对应列表中;再次点击进入该界面时,会再次读取文件名信息,然后得到的数组长度与前面存储的列表长度进行对比,如果数组长度大于列表长度,说明进行了截图保存对应信息到本地操作,然后会新建一个Image用于显示新增的截图信息,并把新的信息存储到列表中;

此处,直接将列表和重新获取的文件名数组一一对应的话,由于数组中获取的文件名数组按照文件名的方式排序,而列表中相当于按照时间排序,添加新增的(依次往后添加),最后两者之间的数据错乱;

1.2、解决方式

该项目中此数组和列表不能按照顺序一一对应;那在进行赋值时,改用通过文件名判断并赋值;

下面代码中,再次获取本地文件数量时,如果发现数组中长度大于列表中元素个数,那说明有新增的,然后遍历获取的数组中名称,在列表中一一匹配,如果发现:数组中有的名称但在列表中没有,那说明该数组名称为新增的,可以用了给新的变量赋值;

再次点击显示界面时,显示的顺序就是按照列表中存入的顺序进行显示,这种情况就相当于按照修改顺序进行排列;

之前代码中:systemButtons[i].name = pathNames[i].Replace(@"\","/");这个相当于把列表中数据顺序按照数组中的顺序重新进行了赋值,这个时候再进行界面显示的也相当于按照数组中的顺序(即Directory.GetFiles()按照文件名获取的文件的顺序排列)

但是第二种方式中,软件初始化时是通过Directory.GetFiles()获取的文件名的顺序排列,而软件运行中,后续新增的信息会在此基础上按照修改日期排列,如果软件使用者习惯按照修改日期来记忆对应的信息,软件重新运行后按照名称排列初始化,会对记忆造成干扰;使用起来不是很人性化;

如果想彻底解决按照修改日期进行排序,可在变量中新增ID,ID随着变量的增删依次变化;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191025A0RA5Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券