На сервере Windows 2003 у меня есть приложение, которое обрабатывает запросы и сохраняет их в папке в виде очереди, куда приходит второй процесс и обрабатывает эти сохраненные запросы. Однако иногда количество файлов достигает 100 000.
Использование Windows Explorer или даже dir в командной строке не кажется мне большим решением, чтобы узнать, сколько файлов там хранится. Это также занимает слишком много времени, процессора и ввода-вывода.
Какие-либо предложения?
Я не уверен, насколько быстро это будет работать с такой большой папкой, но попробовать стоит.
Сохраните приведенный ниже код в файле .vbs. Затем запустите его из командной строки CMD следующим образом:
CSCRIPT FileCount.vbs C:\Insert\Your\Path\Here.
Он учитывает только файл в корне пути, но его можно изменить, чтобы включить подпапки.
Dim oArgs
Set oArgs = WScript.Arguments
If oArgs.Count >= 1 Then
WScript.Echo FileCount(oArgs(0))
End If
'------------------------------------------------------------
'
'------------------------------------------------------------
Function FileCount(sPath)
Dim oFSO
Dim oFolder
Dim oFiles
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
Set oFiles = oFolder.Files
FileCount = oFiles.Count
End Function
Вы можете использовать скрипт на этой странице и назовите это так:
call filecount.bat C:\temp filecount /S
echo %filecount%
Переключатель "/ S" нужен, если вы хотите рекурсивно искать во всех подпапках.
Что ж, в этом случае, если нет встроенных утилит, которые могут помочь, я написал эту маленькую ошибку:
using System;
using System.IO;
namespace FileCount
{
class Program
{
static void Main(string[] args)
{
var files = Directory.GetFiles(".");
Console.Write(files.Length);
}
}
}
но я надеялся, что мне не нужно этого делать. Всем спасибо :)
Обновление: я забыл сказать, что это в .NET (любой версии), а язык - C #.