Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с чтением/записью файла 
:(
    Опции темы
jfx
Дата 9.6.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 18.10.2004

Репутация: 1
Всего: 1



Всем привет. Что-то у меня непонятная проблемка (скорее всего недостаточное знание матчасти):

Код

using(fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
    byte[] fileBuffer = new byte[fs.Length];

    for(int j = 0; j < 2; j++)
    {
        fs.Read(fileBuffer, 0, (int)fs.Length);


        // Тра-ла-ла что ищем и смещение записываем в offset

        fs.Seek(offset, SeekOrigin.Begin);
        fs.Write(new byte[] {1,2,3}, 0, 3);
    }
}


Код упрощен. Считываю файл в буфер, в буфере что-то ищу, затем меняю на то что мне нужно. На следующем шаге цикла снова считываю в буфер файл, что бы следующий поиск происходил с учетом того что поменяли на предыдущем шаге. Дык вот в буфере оказывается какято фигня, совсем не то что в файле. Причем фигня совсем в другом месте, далеко от того места куда записывали на предыдущем шаге.

В чем я не прав?

Это сообщение отредактировал(а) jfx - 9.6.2005, 19:54
PM MAIL   Вверх
nikf
Дата 9.6.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: нет
Всего: 1



fs.Flush(); забыл после врайта, а вообще помоему чушня какая-то smile Ты чего хочешь? произвести замену? загрузи все в массив, закрой файл, проведи изменения и перепиши файл заново. И нечего десять раз промежуточные результаты сохранять...

Это сообщение отредактировал(а) nikf - 9.6.2005, 19:59
PM MAIL   Вверх
jfx
Дата 9.6.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 18.10.2004

Репутация: 1
Всего: 1



Спасибо. Забыл. Но в чем причина того что в буфер считывается фигня, а не содержимое файла без изменений например?

Это сообщение отредактировал(а) jfx - 9.6.2005, 19:56
PM MAIL   Вверх
nikf
Дата 9.6.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: нет
Всего: 1



быстрее меня пишешь..
потому что ты фигню уже туда навствалял.. мудришь с циклом чесно слово
PM MAIL   Вверх
DrLazy
Дата 9.6.2005, 22:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У тебя на втором проходе цикла чтение происходит не с начала файла а со смещения после записи.
  Вверх
mr.DUDA
Дата 10.6.2005, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Есть ещё вероятность, что метод Read читает не столько, сколько ты просишь, а только часть (если реально чтение выполняется асинхронно). Нужно проверить, какое кол-во байт возвращает Read, и если не то которое ожидалось - повторить Read со смещением к первому свободному байту в приёмнике.

Была у меня похожая проблема, связанная с ZipInputStream - там после Read в конце массива почему-то были нули smile, пока на форумах не нашёл вот это:

Код
int nread = 0;
int offset = 0;
do
{
     nread = zipInputStream.Read (buffer, offset, buffer.Length - offset);
     offset += nread;
}
while (nread != 0);



--------------------
user posted image
PM MAIL WWW   Вверх
jfx
Дата 10.6.2005, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 18.10.2004

Репутация: 1
Всего: 1



Спасибо всем.

nikf
всякую фигню я туда не пишу - яж говорил:
Цитата
Причем фигня совсем в другом месте, далеко от того места куда записывали на предыдущем шаге.

Скорее всего действительно чтение происходит не с начала - буду проверять. Еще раз всем спасибо smile
PM MAIL   Вверх
jfx
Дата 10.6.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 18.10.2004

Репутация: 1
Всего: 1



Мда, проверка подтвердила - читает не весь файл и читается не сначала, но в буфер записывает с нуля. Очеведно перед чтением стоит поставить fs.Seek(0, SeekOrigin.Begin)
PM MAIL   Вверх
DrLazy
Дата 10.6.2005, 20:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Именно это smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.