Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
KPiter
Зарегистрирован: 09.06.2007 Сообщения: 2
|
Добавлено: Сб Июн 09 2007 12:52 Заголовок сообщения: Как оганизовать поиск файлов на удаленной машине |
|
|
Hi!
Подскажите как БЫСТРО отыскать файл на удаленной машине. При работе локально на удаленном компьютере поиск файлов занимает меньше секунды, при работе удаленно - десятки секунд. Можно ли поиск сделать средствами уделенного компьютера и только результаты поиска передавать по сети?
Спасиб |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Сб Июн 09 2007 19:50 Заголовок сообщения: |
|
|
запустить консоль управления, подключившись к удалённой машине, и запустить поиск на ней, результаты поиска будут отражаться в консоли на вашей машине _________________ С уважением Dimasm |
|
Вернуться к началу |
|
|
KPiter
Зарегистрирован: 09.06.2007 Сообщения: 2
|
Добавлено: Вт Июл 03 2007 10:09 Заголовок сообщения: |
|
|
Дело в том, что на одной машине (удаленной) храниться много фотографий (файлов). На локальной машине должна быть программа, которая ищет файлы на уделенной машине, копирует их на свой винчестер и открывает папку с результатами поиска. Так вот пока файлов на удаленной машине не много все работает быстро. Как количество файлов переваливает за 3000-4000. Поиск фалов на удаленной машине занимает на много больше времени, хотя таже программа поиска работающая на удаленной машине работает очень быстро.
Код: |
private static void recurse(string path, string copy_path, long count, string[] names)
{
// Create a reference to the current directory.
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);
// Create an array representing the files in the current directory.
System.IO.FileInfo[] fi;
for (int i = 1; i <= count; i++)
{
fi = di.GetFiles(names[i] + "?.jpg");
if (fi.Length > 0)
{
foreach (System.IO.FileInfo fiTemp in fi)
{
if (!System.IO.File.Exists(copy_path + @"\" + fiTemp.Name))
System.IO.File.Copy(path + @"\" + fiTemp.Name, copy_path + @"\" + fiTemp.Name);
}
}
}
System.IO.DirectoryInfo[] dis = di.GetDirectories();
foreach (System.IO.DirectoryInfo diTemp in dis)
{
recurse(path + @"\" + diTemp.Name, copy_path, count, names);
}
} |
path - путь где искать (может быть задан локально или как имя сетевого диска), copy_path - куда копировать (всегда имя диска машины на которой программа запущенна). |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Вт Июл 03 2007 15:16 Заголовок сообщения: |
|
|
KPiter писал(а): | Так вот пока файлов на удаленной машине не много все работает быстро. Как количество файлов переваливает за 3000-4000. Поиск фалов на удаленной машине занимает на много больше времени, хотя таже программа поиска работающая на удаленной машине работает очень быстро. |
Ничего удивительного, вся информация о 4 тыс файлах (размер, имя, атрибуты...) передаётся по сети твоей программе и она их анализирует
есть только два варианта ускорения:
- запускать твою программу на удалённом компьютере(где локально она будет быстро искать) , а на свой передавать только результаты поиска
- запускайте программу в несколько потоков... но тут надо как-то разбивать диапазоны поиска _________________ С уважением Dimasm |
|
Вернуться к началу |
|
|
vir
Зарегистрирован: 17.05.2007 Сообщения: 24
|
Добавлено: Ср Июл 04 2007 16:21 Заголовок сообщения: |
|
|
Надо искать на машине с файлами, "сервере" (машине с path).
Результаты поиска можно записать в файл (пусть даже на машине с copy_path, "клиенте")
После этого можно запустить копирование на клиенте, он будет брать список файлов и делать copy. |
|
Вернуться к началу |
|
|
|