문제

디렉토리의 50 개의 파일 중 8 개의 파일 중 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);
}
.

도움이 되었습니까?

해결책

이 코드와 비슷한 코드를 작성하고 싶습니다.

int GetFileContentNumber(string filename)
{
  using(var reader=new StreamReader(filename)
  {
    char[] chars=new char[6];
    reader.Read(buf, 0, 6);
    return int.Parse(new String(chars));

  }
}

IEnumerable<string> files = System.IO.Directory.GetFiles(textBox1.Text)
    .Select(filename=>new KeyValuePair<string,int>(filename, GetFileContentNumber(filename)))
    .OrderBy(pair=>pair.Value)
    .Select(pair=>pair.Key);
.

그러나 나는 그것을 테스트하지 않았습니다.그래서 그것은 여전히 버그가있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top