Страница: 1 |
Страница: 1 |
Вопрос: читать данные файла с середины
Добавлено: 22.05.09 17:59
Автор вопроса: AWР | Web-сайт:
IO.File.OpenRead("D:\Grounds.nrg").BeginRead(ba, FileSystem.FileLen("D:\File.nrg"), ba.Length, System.AsyncCallback.Combine, 1)
мне нужно прочесть файл "D:\Grounds.nrg" с того места где кончается его незавершенная копия-"D:\File.nrg".
как я понимаю этого можно добится параметрром Offset (2-й параметр после BeginRead)
почему вылезает такая ошибка:
Смещение и длина вышли за границы массива или значение счетчика превышает количество элементов от указателя до конца исходной коллекции
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 22.05.09 18:03
Сначала FileStream нужно сместить в нужную позицию (FileStream.Position/FileStream.Seek). Затем методом FileStream.Read выполнять чтене данных.
Парамтер Offset в этом методе означает не смещение относительно начала файла, а смещение относительно начала массива в который ты считываешь данные и обычно смещение указывается 0.
Зачем тебе BeginRead? Это метод для асинхронного выполнения, может тебе в данном случае асинхронное выполнение не нужно и будет достаточно синхронного? (Read)
Номер ответа: 2
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #2
Добавлено: 22.05.09 18:11
я незнаю чё за асинхронное.
Номер ответа: 3
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #3
Добавлено: 22.05.09 18:35
спасибо за совет. я написал так:
вопрос в том нужно ли fsWrite.Seek ? я думаю если этого не написать перепишет весь файл, а если написать то будет его дополнять до такого же размера что и оригинал. так?
Номер ответа: 4
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #4
Добавлено: 22.05.09 19:10
И еще я не смог очистить оперативку. она забита пока не завершится приложение.
я пробовал
не помогает
Номер ответа: 5
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #5
Добавлено: 22.05.09 20:04
памагите очистить ресурсы ПЛЗ...
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 22.05.09 21:23
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 22.05.09 21:24
Вообще объявлять буфер размером с целый файл не обязательно - для того чтоб скопировать данные из одного файла в другой достаточно объявить буфер небольшого размера (например, мегабайт) и в цикле выполнять копирование из одного места в другое, тогда программе будет требоваться меньше памяти.
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 22.05.09 21:25
я незнаю чё за асинхронное.
Если хочешь чтоб окно программы не висло пока идет копирование данных, нужно либо запускать асинхронную операцию, либо запускать отдельный поток.
Номер ответа: 9
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #9
Добавлено: 25.05.09 17:25
а если не писать этой строки то как объявить путь (":\Kacka\1.nrg" после этого:
Номер ответа: 10
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #10
Добавлено: 25.05.09 17:27
долбанные смайлы. надеюсь понятно. я имею ввиду что путь будет известен только после DIM'a.