Почему я не вижу значения в ближайшем окне? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть фрагмент кода, который будет проходить по каталогу и создавать из него модель данных. Например, если у меня есть структура каталогов:

c:\TestDir1

c:\TestDir1\Sub1\
c:\TestDir1\Sub1\File1.txt
c:\TestDir1\Sub1\File2.txt

c:\TestDir1\Sub1\SubSub1
c:\TestDir1\Sub1\SubSub1\File3.xlsx

c:\TestDir1\Sub1\SubSub1\SubDirX
c:\TestDir1\Sub1\SubSub1\SubDirX\File4.txt
c:\TestDir1\Sub1\SubSub1\SubDirX\File5.txt
c:\TestDir1\Sub1\SubSub1\SubDirX\File6.txt

Создает соответствующую модель данных с помощью следующего кода:

static void BeginIt()
{
    DirectoryInfo diTop = new DirectoryInfo(@"c:\Misc\3) Projects\002) Document Manager\DirectoryReading\TestDir1");
    string path = diTop.FullName;
    MySubDir mySubDir = new MySubDir(path);
}

public class MySubDir
{
    public ArrayList _dirs;
    public ArrayList _files;

    public MySubDir(string dirPath)
    {
        _dirs = new ArrayList();
        _files = new ArrayList();
        this.ProcessDirectory(dirPath);
    }

    private void ProcessDirectory(string dirPath)
    {
        // Process the list of files found in the directory.
        string[] fileEntries = Directory.GetFiles(dirPath);
        foreach (string fileName in fileEntries)
        {
            _files.Add(fileName);
        }

        // Recurse into subdirectories of this directory.
        string[] subdirectoryEntries = Directory.GetDirectories(dirPath);

        foreach (string subdirectory in subdirectoryEntries)
        {
            _dirs.Add(new MySubDir(subdirectory));
        }
    }
}

Вот мой вопрос. Когда я шаг за шагом перебираю код, он соответствующим образом строит модель данных. Когда я делаю AddWatch, я вижу объект, и структура каталогов построена правильно.

Когда я пытаюсь получить доступ к значению содержимого через Immediate Window, я получаю ошибки. Например, если я наберу следующее в ближайшем окне следующее

? mySubDir._dirs [0] ._ каталоги [0]

Я получаю ошибку.

Как получить значения этих подкаталогов? Я хотел бы иметь возможность доступа к именам каталогов и именам файлов элементов в этой модели теперь, когда она создана.

Спасибо

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Не похоже, что это сработает, поскольку выражение mySubDir.whatever зависит от того, находится ли mySubDir в области действия и имеет допустимое значение.Чтобы это произошло, конструктор должен вернуть first - но объект заполняется во время выполнения конструктора.Так что на самом деле нет смысла во время жизни этой программы, что такое выражение даст значимый результат.

Если вы вломитесь в отладчик внутри метода ProcessDirectory, вы можете использовать this._dirs, чтобы посмотретьв структуру данных.

Кроме того, ArrayList - не лучший выбор для коллекции, которая, как вы знаете, заранее будет содержать только string s, как те, что у вас здесь.Было бы более целесообразно определить их как System.Collections.Generic.List<string>.

0 голосов
/ 19 марта 2012

_dirs - это ArrayList, в котором хранятся объекты, поэтому вам необходимо преобразовать объект из первого _dir [0] в MySubDir

, например,

((MySubDir)mySubDir._dir[0])._dir[0]

. Или измените тип коллекции.от ArrayList до

List<MySubDir>

это даст вам строго типизированные элементы списка при доступе с помощью индексатора.

0 голосов
/ 19 марта 2012

хорошо .. _dirs и файлы являются arraylist .. так что вы можете пересечь этот список и получить все значения. a for, перечислитель, linq или любой другой метод, который вам нравится, поможет вам.

Обновление:

Прочитав еще немного вашего поста, я думаю, что есть проблема базового понимания. Добавление только имен к классу не даст вам положение файла или его папки. Вам придется искать лучший способ его использования (может быть, папка / файлы классов, которые также могут содержать папки?) ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...