Как я узнаю, сколько файлов находится в каталоге?

Если вы можете использовать Javascript ... Используйте решение @Temani Afif, если не можете

Array.from(document.querySelectorAll('.optionnal')).forEach(el => {
  // If the text of "Optionnal" is greater than 84, then ellipse it...
  el.innerText = el.innerText.length > 84 ? el.innerText.slice(0, 84) + '...' : el.innerText
})
.title {
  width : 250px;
  height : 70px;
  overflow : show;
  border : 1px solid black;
}
.stay {
  color : red;
}
<h3 class="title">
  <span class="optionnal" >This is a test</span>
  <span  class="stay"> I MUST STAY</span>
</h3>
<h3 class="title">
  <span class="optionnal">This is a test This is a test This is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a testThis is a test This is a test</span>
  <span class="stay"> I MUST STAY</span>
</h3>
<h3 class="title">
  <span class="optionnal">This is a test This is a test This is a test This is a testThis is a test This is a...</span>
  <span class="stay"> I MUST STAY</span>
</h3>

11
задан abatishchev 14 September 2011 в 15:07
поделиться

4 ответа

Я не верю так, нет - по крайней мере, не в ванильной.NET. Я подозреваю, что это не фактическая выборка имен, которая занимает время - это - ОС, идущая через внутренности каталога. Может быть вызов Win32, который Вы могли выполнить через P/Invoke.

Насколько большой каталог, на который Вы смотрите? В целом это по крайней мере традиционно не была хорошая идея иметь больше чем несколько сотен файлов в каталоге. Файловые системы улучшились в этом в целом, но я не знаю то, что текущее состояние с NTFS и Fat32.

14
ответ дан 3 December 2019 в 04:14
поделиться

Нет никакого более быстрого пути. Независимо от того, что Вы используете, все это сводится к FindFirstFile и FindNextFile Вызовы Win32.
Вы могли попытаться использовать что-то вроде этого, но, вероятно, потребуется такое же время - но возможно с немного меньшим количеством использования памяти (=, вероятно, не стоящий того).

3
ответ дан 3 December 2019 в 04:14
поделиться

Я действительно немного тестировал - записал ту же задачу в C++ / спокойный и C++ / CLI:

LARGE_INTEGER i1, i2;       

QueryPerformanceCounter(&i1);       

int count = IO::Directory::GetFiles(L"c:\\windows\\system32")->Length;

QueryPerformanceCounter(&i2);

__int64 result = i2.QuadPart - i1.QuadPart;

Результат - приблизительно 16 500 000

и

LARGE_INTEGER i1, i2;

QueryPerformanceCounter(&i1);

intcount = QDir("c:/windows/system32").entryList(QDir::Files).count();

QueryPerformanceCounter(&i2);

__int64 result += i2.QuadPart - i1.QuadPart;

Результат - приблизительно 2 100 000 000

Количество файлов 2125

7
ответ дан 3 December 2019 в 04:14
поделиться

До сих пор на большинстве языков я столкнулся, Вы получаете эту информацию только путем обхода папки и подсчета файлов. Я сомневаюсь, что существует Windows API call для получения только количества (но я могу быть удивлен!).
Преимущество метода: гибкость - можно отфильтровать некоторые типы файлов, спуск рекурсивно или проигнорировать папки и т.д.

Если метод является медленным для Вас, возможно, необходимо получить лучший метод, как не создание массива, заполненного информацией о каталоге (занимает время для заполнения его! не говоря уже о стоимости памяти и время сборки "мусора"), но использование итератора: немного больше работы (но после того как Вы получаете функцию, это всегда там), но намного более эффективный.

1
ответ дан 3 December 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: