Как отобразить все текстовые файлы, которые находятся в локальной системе, в поле со списком «Из загрузки» - PullRequest
0 голосов
/ 01 апреля 2011

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

Я написал свой код так

string[] filepaths;
filepaths = Directory.GetFiles(@"c:\", "*.txt", SearchOption.AllDirectories);

Но это выдает ошибку, как я могу прочитать файлы из всех каталогов

Ответы [ 3 ]

2 голосов
/ 01 апреля 2011

Примерно так:

string drivePath = @"C:\";

var textFiles = Directory.GetFiles(drivePath, "*.txt", SearchOption.AllDirectories);
listBox1.DataSource = textFiles;

обратите внимание, что рекурсивный обход всего диска может занять много времени ...

РЕДАКТИРОВАТЬ:

Чтобы избежать проблемы отказа в доступе, вместо Directory.GetFiles() вы можете использовать код, указанный в этом ответе :

string drivePath = @"C:\";

var textFiles = GetFiles(drivePath, "*.txt").ToList();
listBox1.DataSource = textFiles;
0 голосов
/ 01 апреля 2011

Сканирование через вашу файловую систему - это случай рекурсии, множество примеров там.Однако сделать это «под нагрузкой» замедлит загрузку формы, что вам нужно сделать, это загрузить форму, а затем произвести отображение «заполненной формы» во время его отключения, в конце концов, если сканирование занимает 10 минутвы не хотите, чтобы ваши пользователи предполагали, что ваши системы вышли из строя.

Пример кода для поиска ваших текстовых файлов может быть следующим:

List<String> files=new List<string>();

void Walk(String  name)
{
  For each (String sFileName in Directory.Getfiles(name,"*.txt"))
  {
      files.add(sFilename);
  }
  For each (String sDirectory in Directory.GetDirectories(name))
  {
    Walk(sDirectory);
  }
}

Убедитесь, что вы запускаете это в какой-то форметак что ваше приложение может оставаться отзывчивым.

0 голосов
/ 01 апреля 2011

Этот метод должен делать то, что вы хотите: http://msdn.microsoft.com/en-us/library/wz42302f.aspx

...