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