Question

Lorsque j'exécute le code ci-dessous, seuls 8 des 50 fichiers de l'annuaire sont ajoutés.

Les fichiers sont nommés comme 0001, 0002, 0003, 0004, etc.

Les fichiers qui sont ajoutés sont dans cette commande: 7,0,1,2,3,4,5,6 lorsque les éléments ne sont plus ajoutés.

En regardant les valeurs MIN et MAX de My SortEDset sont respectivement de 6 et 7.

Je suppose que ma question est une meilleure façon de le faire ou un moyen d'obtenir le code ci-dessous pour faire ce que je veux.Pour être plus précis, je souhaite que les chaînes de chemin de fichier soient triées dans une collection basée sur les valeurs analysées dans le fichier.

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

Était-ce utile?

La solution

J'écrirais votre code similaire à celui-ci:

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

Mais je ne l'ai pas testé.Donc, cela pourrait encore avoir des bugs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top