1

メソッドを書いてみました。

public List<string> getList()
{
    string[] str;
    string no, name, size, price;
    string albumFolder = @"F:\Audio";
    char a = ' ';

    List<string> albums = new List<string>();

    albumFolder.Split(Path.DirectorySeparatorChar);
    str = albumFolder.Split(Path.DirectorySeparatorChar);

        for (int i = 0; i < str.Length; i++)
        {
            string n = str[i].ToString();
            n = n.Split(Path.DirectorySeparatorChar).ToString();
            no = (i > 8 ? "  " : "    ") + (i + 1) + "".PadRight(10, a);
            name = n.PadRight((155 - n.Length), a);
            size = "" + 512 + " MB".PadRight(20, a); // also help me finding their size
            price = "" + 80 + "".PadRight(10, a);
            albums.Add(no + name + size + price);
        }
    return albums;
}

このメソッドは a を返すListので、これを行うことができます:

albumList.DataSource = getList(); //albumList is a ComboBox

これListには、すべてのサブフォルダーの名前 (場所ではなく、名前のみ) を含む固定長の文字列が含まれている必要があります。しかし、それは絵のようにやっています:

ここに画像の説明を入力 前もって感謝します...

4

4 に答える 4

1

これはあなたが探しているものだと思います(ただし、より良い/簡単な方法があることに同意します):

public List<string> getList()
        {
            string no, name, size, price;
            string albumFolder = @"F:\Audio";
            char a = ' ';

            List<string> albums = new List<string>();

            string[] str = Directory.GetDirectories(albumFolder);

            for (int i = 0; i < str.Length; i++)
            {
                DirectoryInfo info = new DirectoryInfo(str[i]);
                no = (i > 8 ? "  " : "    ") + (i + 1) + "".PadRight(10, a);
                name = info.Name.PadRight(155, a);
                size = "" + 512 + " MB".PadRight(20, a); // also help me finding their size
                price = "" + 80 + "".PadRight(10, a);
                albums.Add(no + name + size + price);
            }
            return albums;
        }
于 2012-12-28T18:33:40.987 に答える
0

コードから以下の行を削除すると、すべて正常に動作します。

n = n.Split(Path.DirectorySeparatorChar).ToString();
于 2012-12-28T18:38:56.720 に答える
0

コードが非常に複雑である必要はありません。Directory および Path クラス、つまり Path.GetDirectoryName を使用し、手動で解析しないでください。

NET4 以前の方法でファイルをウォークするコードを次に示します。

/// <summary>
/// Walks all file names that match the pattern in a directory
/// </summary>
public static IEnumerable<string> AllFileNamesThatMatch(this string fromFolder, string pattern, bool recurse)
{
  return Directory.GetFiles(fromFolder,
                     pattern,
                     recurse ? SearchOption.AllDirectories :
                               SearchOption.TopDirectoryOnly);
}

/// <summary>
/// Walks all file names in a directory
/// </summary>
public static IEnumerable<string> AllFileNames(this string fromFolder, bool recurse)
{
  return fromFolder.AllFileNamesThatMatch("*.*", recurse);
}

Sum<> LINQ を使用して IEnumerable をウォークすることでサイズを取得できます

于 2012-12-28T18:32:15.523 に答える
0

List<String>に変更BindingList<String>

public BindingList<string> getList()
{
    ...
   return new BindingList<string>(albums);
}
于 2012-12-28T18:22:19.047 に答える