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随着变量的增删依次变化;
领取专属 10元无门槛券
私享最新 技术干货