Domanda

Quando eseguo il codice sotto solo 8 dei 50 file nella directory vengono aggiunti.

I file vengono nominati come 0001, 0002, 0003, 0004, ecc.

I file che vengono aggiunti sono in questo ordine: 7,0,1,2,3,4,5,6 quando gli articoli non vengono più aggiunti.

Guardando i valori min e massimo del mio smistata sono rispettivamente 6 e 7.

Suppongo che la mia domanda ci sia un modo migliore per farlo o un modo per ottenere il codice qui sotto per fare ciò che voglio.Per essere più specifici voglio che le stringhe del percorso del file siano ordinate in una raccolta in base ai valori analizzati nel 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);
}
.

È stato utile?

Soluzione

Scriverò il tuo codice simile a questo:

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

Ma non l'ho testato.Quindi potrebbe ancora avere bug.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top