SortedSet 增加了混乱
当我运行下面的代码时,目录中的 50 个文件中仅添加了 8 个。
文件的命名类似于 0001、0002、0003、0004 等。
当不再添加项目时,添加的文件按以下顺序排列:7,0,1,2,3,4,5,6。
查看我的 SortedSet 的最小值和最大值分别是 6 和 7。
我想我的问题是有更好的方法来做到这一点,或者有一种方法可以让下面的代码做我想做的事情。更具体地说,我希望根据文件中的解析值在集合中对文件路径字符串进行排序。
string[] files = System.IO.Directory.GetFiles(textBox1.Text);
SortedSet<string> ascending = new SortedSet<string>(new MyComparer());
foreach (string f in files)
{
bool added = ascending.Add(f);
}
//Compares values in file format
//MyComparer.Compare:
using (FileStream fsx = new FileStream(x, FileMode.Open, FileAccess.Read, FileShare.Read))
using (FileStream fsy = new FileStream(y, FileMode.Open, FileAccess.Read, FileShare.Read))
using (StreamReader rx = new StreamReader(fsx))
using (StreamReader ry = new StreamReader(fsy))
{
//the first 6 bytes represent a number
char[] buffx = new char[6], buffy = new char[6];
rx.Read(buffx, 0, 6);
ry.Read(buffy, 0, 6);
int nx, ny;
if (!int.TryParse(new String(buffx), out nx))
throw new Exception("Wtf?");
if (!int.TryParse(new String(buffy), out ny))
throw new Exception("Wtf?");
return Comparer<int>.Default.Compare(nx, ny);
}
When I run the code below only 8 of the 50 files in the directory get added.
The files are named like 0001, 0002, 0003, 0004, etc.
The files that get added are in this order: 7,0,1,2,3,4,5,6 when items are no longer added.
Looking at my SortedSet's Min and Max values are 6 and 7 respectively.
I suppose my question is there a better way to do this or a way to get the below code to do what I want. To be more specific i want the file path strings to be sorted in a collection based on the parsed values in the file.
string[] files = System.IO.Directory.GetFiles(textBox1.Text);
SortedSet<string> ascending = new SortedSet<string>(new MyComparer());
foreach (string f in files)
{
bool added = ascending.Add(f);
}
//Compares values in file format
//MyComparer.Compare:
using (FileStream fsx = new FileStream(x, FileMode.Open, FileAccess.Read, FileShare.Read))
using (FileStream fsy = new FileStream(y, FileMode.Open, FileAccess.Read, FileShare.Read))
using (StreamReader rx = new StreamReader(fsx))
using (StreamReader ry = new StreamReader(fsy))
{
//the first 6 bytes represent a number
char[] buffx = new char[6], buffy = new char[6];
rx.Read(buffx, 0, 6);
ry.Read(buffy, 0, 6);
int nx, ny;
if (!int.TryParse(new String(buffx), out nx))
throw new Exception("Wtf?");
if (!int.TryParse(new String(buffy), out ny))
throw new Exception("Wtf?");
return Comparer<int>.Default.Compare(nx, ny);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我会编写与此类似的代码:
但我还没有测试过它。所以它可能仍然存在错误。
I'd write your code similar to this:
But I haven't tested it. So it might still have bugs.