Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];

Вниз

Помогите реализовать докачку файла по локальной сети   Найти похожие ветки 

 
Diablo_al   (2003-03-05 17:56) [0]

Я мытался посимвольно копировать это получилось но очень медленно
файл размером в 600 метров копирует гдето час.
если кто-то делал подскажите как правильно


 
Slym   (2003-03-06 06:53) [1]

Читай побуферно (4кб*i)... Быстрее будет...


 
diablo_al   (2003-03-06 12:42) [2]

если есть примерчик поделись Плиз


 
Anatoly Podgoretsky   (2003-03-06 12:47) [3]

Что то сетью, а какая она у тебя?


 
Карелин Артем   (2003-03-06 13:12) [4]

Я не знаю что подразумевается под "копированием по сети" в данном случае, поэтому даю самый общий код по копированию файлов блоками.

procedure TForm1.Button1Click(Sender: TObject);
var st1,st2:TFileStream;
st3:TMemoryStream;
i,BlockSize,BlockNum:Integer;
begin
BlockSize:=$FFFF;
st1:=TFileStream.Create(FilenameEdit1.FileName,fmOpenRead);
st2:=TFileStream.Create(FilenameEdit2.FileName,fmCreate);
st3:=TMemoryStream.Create;
st1.Position:=0;
BlockNum:=st1.Size div BlockSize;
ProgressBar1.Max:=BlockNum;
for i:=0 to BlockNum-1 do
begin
st3.Clear;
ProgressBar1.Position:=i;
Application.ProcessMessages;
st3.CopyFrom(st1,BlockSize);
st3.SaveToStream(st2);
end;
st3.CopyFrom(st1,st1.Size-st1.Position);
st3.SaveToStream(st2);
ProgressBar1.Position:=0;
st1.Free;
st2.Free;
st3.Free;
end;


 
Translator   (2003-03-06 14:43) [5]

Попробуй копировать не посимвольно, а целым стрингом.
Я писал прогу на паскале, аналогичную твоей (по-видимому). получается гораздо быстрее. Посимвольное копирование вообще очень тормозное, поэтому открой файл и копируй стриногом, причем не ограничивай длину, то есть CopyngData: String;
Может чем поможет...


 
AlexRush   (2003-03-06 20:28) [6]

В HDD минимальная возможная для доступа единица информации - 1 кластер. Даже если ты читаешь 1 байт из фала, реально время тратится на считывание кластера. При чтении следующего байта HDD ждет, пока нужный кластер подойдет под головку чтенния (т.к он уже вышел из под нее), а если за это время произошло обращение к другому кластеру, то время тратится еще и на позиционирование головки. Таким образом, чтобы избежать холостого хода, читать нужно блоками, желательно кратными размеру кластера. Учитыва то, этиданные потом по сети толкаются, читать нужно небольшими блоками.

Если надо, пришлю рабочю прогу - некий примитивный аналог ReGet"a
для локалки. Очередь закачек + докачка. Интерфейс недоделан,кое где Exceptionы не прохендлены а в остальном работает. (Копирует файл небольшими блоками).


 
Anatoly Podgoretsky   (2003-03-06 20:30) [7]

Обращение к следующему байту не приведет к повторному чтению кластера!
А вот то что он не хочет ничего сказать про свою сеть и как он читает это очень плохо, наверно ответ ему не нужен.


 
AlexRush   (2003-03-06 20:33) [8]

Anatoly Podgoretsky >> "Обращение к следующему байту не приведет к повторному чтению кластера!"
Обоснуй пожалуйста.


 
Anatoly Podgoretsky   (2003-03-06 20:43) [9]

Кластер/сектор загружается в буфер и в дальнейшем данные берутся из него



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
1-610
NA
2003-04-13 21:26
2003.05.01
Invalidate vs Refresh при обновлении свойств компонента


3-421
Alex_t
2003-04-11 19:50
2003.05.01
проверка корректности данных в таблице


14-707
Pat
2003-04-12 10:08
2003.05.01
Вопрос по SoftIce у


7-816
SB
2003-03-11 15:37
2003.05.01
Падает print диалог в Windows XP


1-633
AlexAvz
2003-04-18 16:53
2003.05.01
Многооконные документы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский