Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Разбить файл  (Прочитано 6744 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mfcer__
Команда клуба

ru
Offline Offline

« : 06-10-2005 00:02 » 

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

делаю это но выходит слишком медленно из - за побайтового копирования

Как можно оптимизировать код
Код:
long count = 1;            
bool stop = false;
using (FileStream stream = File.Open(FileName, FileMode.Open))
{
    while (!stop)
    {
    using (FileStream part = new FileStream("sad"+count.ToString()), FileMode.CreateNew))
    {
        while (part.Length < PartSize)
        {
            int readByte = stream.ReadByte();
            if (readByte == -1)
            {
                stop = true;
                break;
            }
            part.WriteByte((byte)readByte);
        }
    }
    count++;
}
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 06-10-2005 05:04 » 

Можно считывать данные из файла блоками и проверять полученные блоки на наличие -1 уже в памяти.
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 21-10-2005 05:43 » 

может этопоможет
(пишу правда в ьасике, но разобраться можно)

Код:
dim lngByte as long              ' длина части файла в байтах
dim arByte() as byte             ' массив байтов
dim lngSize as long             ' размер файла
dim lngPos as long               ' позиция в файле при чтении

'задаем размер блока
lngByte = 1000
'формируем массив для блока
ReDim arbyte(lngByte)

dim st as stream = file.Open(File.Name, FileMode.Open)
lngSize = st.Length
st.Position = 0
lngPos = 0
while lngPos <= lngSize
  'читаем блок
  st.read(arByte, lngPos, lngByte)
  ....
  ....
  'переходим к следующзему блоку
  lngPos += lngByte + 1
Wend

возможно еще потребуется сделать проверку на кол-во оставшихся байт, чтобы не вылезти за размеры файла
« Последнее редактирование: 20-12-2007 14:50 от Алексей1153++ » Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines