Как принудительно уменьшить скорость копирования файлов?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Как принудительно уменьшить скорость копирования файлов?

Сообщение MEMBER » 21.12.2003 (Вс) 17:12

Есть у меня самописная бэкап программа. И есть комп, медленный и жалкий, с которого и надо бэкапить данные. Естественно, когда с этого компа начинается копирование файлов, он стонет, повизгивает, скрипит кишочками ака винтом и вообще тормозит. При этом, за ним ещё работают люди. Пытаются, если быть более точным. И сильно они меня ругают. А бэкапить надо. И работать надо. И ночью тоже нельзя бэкапить. Потому-что.
Так вот, что делать? Кроме одной, слабо шевелящейся и еле живой мысли открывать файл как бинарник, и делать побайтовое копирование, ничего на ум не приходит.
Спасибо.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 21.12.2003 (Вс) 18:03

Копирование через API - наибыстрейший способ (как для нработы, так и для программинга). Просто нужно соглосовать время бэкапа и время работы - типа, перерыв в работе - бэкап и наоборот. Идеал - клиент-сервер, где бэкапилка клиент и ей можно управлять с сервера (вообще на всех компах). Соответственно менять график работы.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 21.12.2003 (Вс) 18:27

Не, я всё понимаю. Но мне нужен не "быстрейший способ", мне пофиг, собсно, сколько времени займёт бэкап, поставлю прогу сервисом + расписание + минимальный приоритет и нехай копирует. Мне надо, чтобы удалённая машина не нагружалась. О чём, собсно, в вопросе и написал.
Просто нужно соглосовать время бэкапа и время работы - типа, перерыв в работе - бэкап и наоборот.

Идея великолепная, но на практике - невыполнимая. Ибо радиостанция. Поэтому комп работает по формуле 24/7/12
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 22.12.2003 (Пн) 0:27

Я тебя поддерживаю ... реально тут похоже побайтово прийдется копировать, только так можно контролировать скорость ... хоть байт в секунду хоть в час... а вот то, как этим процесом управлять ... - это другой вопрос:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

RaPtoR_1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 172
Зарегистрирован: 14.04.2002 (Вс) 11:17
Откуда: Ukraine

Сообщение RaPtoR_1 » 22.12.2003 (Пн) 1:00

копируешь например 64 килобайта и делаешь паузу на 2-3 секунды,потом опять и так далее
а паузу мона реализовывать вроде так
вот используй саб

Sub Pause(duration)
On Error Resume Next
'Pause for the specified duration
'Duration is in seconds
Dim Current As Long
Current = Timer
Do Until Timer - Current >= duration
DoEvents
Loop
End Sub
продаю шестизначные аси.....
http://uins.webm.ru/icq.php

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 22.12.2003 (Пн) 1:13

Спасибо. Как паузу реализовать я в курсе. :) Только я слипом планировал.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 22.12.2003 (Пн) 1:20

Ну да ... но выход я вижу один - бинарный
Можешь даже так..

Код: Выделить всё
Sub MyCopy(File1,File2)
Dim AAA as Byte

Open File1 as 1
  Open File2 as 2
   While I<=FileLen(File1)
    I=I+1   
    GET #1, I, AAA
    PUT #2, I, AAA
    If I mod 50000 = 0 then Sleep 5 ' или типа того задержку
    Wend 
  Close
end sub

вот можно и так...
Последний раз редактировалось SSecurity 22.12.2003 (Пн) 1:38, всего редактировалось 1 раз.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

RaPtoR_1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 172
Зарегистрирован: 14.04.2002 (Вс) 11:17
Откуда: Ukraine

Сообщение RaPtoR_1 » 22.12.2003 (Пн) 1:32

слип фигиво использовать, на слипе приложение виснит
продаю шестизначные аси.....
http://uins.webm.ru/icq.php

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 22.12.2003 (Пн) 1:44

Ну хорошо .... вставь вместо "SLEEP 5" например "Pause(5)", смысл то не изменится ...
кстати говоря. рекомендую использовать API функцию GetTickCount, она дает время работы системы в миллисекундах, и точно у тебя траблы не воникнет когда ты стртанул без 2 секунд полночь и никогда не закончишь ,-)

Код: Выделить всё
Public Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.12.2003 (Пн) 11:15

Ну...
К примеру есть таймер, в котором выполняется приращение глобальной переменной nPos = nPos + 250. Есть другая переменная, которая указывает на позицию в файле nPosStart. И есть основная бэкап-процедура примерно такого вида:
Код: Выделить всё
Dim buff() As Byte, BuffSize As Long, FN1 As Integer, FN2 As Integer
FN1 = FreeFile
Open ... As #FN1
FN2 = FreeFile
Open ... As #FN2
nPos = 0
nPosStart = 0
tmrCopy.Interval = 250 ' скорость 1000 байт в секунду
tmrCopy.Enabled = True
Do Until EOF(FN1)
  DoEvents
  BuffSize = nPos - nPosStart
  If BuffSize > 65536& or nPosStart+BuffSize => LOF(#FN1) Then
    If nPosStart+BuffSize => LOF(#FN1) Then BuffSize = LOF(#FN1)-nPosStart
    ReDim buff(0 To BuffSize - 1)
    Get #FN1, nPosStart, buff()
    Put #FN2, nPosStart, buff()
    nPosStart = nPosStart + BuffSize
  End If
Loop
tmrCopy.Enabled = False
Close #FN1, #FN2

Что-то типа этого, наверное. Но:
1. Дата и время файла не будут совпадать с оригиналом;
2. Обычные и расширенные аттрибуты файла также пропадут;
3. Коряво это.

Лучше использовать административные методы. Например есть утилитка Bandwidth Controller Manager, которая может ограничивать трафик в произвольных направлениях.
Lasciate ogni speranza, voi ch'entrate.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 22.12.2003 (Пн) 11:55

alibek
1) Не волнует
2) Аналогично
3) Да пофиг

А насчёт программки, она снижает скорость работы со всеми хостами, или только с указанными? И ссылку на неё, плиз.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.12.2003 (Пн) 14:47

Она умеет разбивать по направлениям, протоколам, портам и адресам. Смотри ЛС
Lasciate ogni speranza, voi ch'entrate.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 23.12.2003 (Вт) 0:37

Люди ... Ну что там с аттребутами...

Код: Выделить всё
Dim N As VbFileAttribute
Dim File1 as String '[Начальный файл]
Dim File2 as String '[Конечный файл]
'... все преобразования
N = getattr(File1)
Setattr File2, N
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.12.2003 (Вт) 15:13

SSecurity, так то оно так, да не так. Это основные атрибуты. А есть еще расширенные. Например в NTFS пропадет (вернее сбросится на дефолтные) секьюрити (permissions, owner, audit и прочее), пропадут потоки в файле, не скопируются жесткие линки (хотя этого и не надо). Вообщем, много всего, поэтому надо юзать системные функции. Тем более, что в API CopyFileEx есть callback-функция, в которой можно и притормозить копирование (если надо).
Lasciate ogni speranza, voi ch'entrate.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 24.12.2003 (Ср) 1:05

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

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 24.12.2003 (Ср) 17:12

а вы не думали над тем что пока прога будет раз в 10 секунд по 100кб читать файлик успеет поменяться?

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 25.12.2003 (Чт) 0:15

Ну чтож ... если он и поменяется, тогда вариант такой ... делаем резервную копию и скачиваем что нам нужно ...

а вообще смысл копировать файл который меняется каждые 10 секунд? или даже меньше ...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Сообщение TEH3OP » 26.12.2003 (Пт) 10:37

У меня есть мысль: есть API-функция CopyFileEx, я тут с ней как раз разбираюсь. Ну так вот, у неё есть параметр, в который передаётся адрес CallBack функции, которая получает % завершения и проч. статы. Ну так вот, интерессно, когда CopyFileEx вызывает CallBack этот -- ОН ЖДЁТ ПОКА ОНА (CallBack) ЗАКОНЧИТ РАБОТУ?
НЕ ФАКТ, Я НЕ ЗНАЮ, НО ВДРУГ...
Насчёт посылов в эротическое путешествие -- это просто идея! ;-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2003 (Пт) 10:48

Ждёт, конечно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Сообщение TEH3OP » 26.12.2003 (Пт) 10:53

GSerg писал(а):Ждёт, конечно.

Ну воОоОоОот!!! Проблемма, получается, решена -- далаешь тормоз в кабеке, оно и будет порцями файл качать и хардом трещять! ;-)
Короче, попробуйте!!!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 5

    TopList