Pregunta

Cuando ejecuto el código a continuación, solo 8 de los 50 archivos en el directorio se agregan.

Los archivos se denominan como 0001, 0002, 0003, 0004, etc.

Los archivos que se agregan se agregan en este orden: 7,0,1,2,3,4,5,6 cuando los artículos ya no se agregan.

Mirando los valores mínimo de My SortedSet y MAX son 6 y 7 respectivamente.

Supongo que mi pregunta es una mejor manera de hacer esto o una forma de obtener el siguiente código para hacer lo que quiero.Para ser más específicos, quiero que las cadenas de ruta de archivo se clasifiquen en una colección basada en los valores analizados en el archivo.

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);
}

¿Fue útil?

Solución

Escribiría su código similar a esto:

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);

Pero no lo he probado.Por lo que todavía podría tener bichos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top