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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись в файл, чтение из файла в .NET 
:(
    Опции темы
akaineco
Дата 24.1.2005, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Запись в файл, чтение из файла.
В MSDN по этому вопросу мне удалось найти только это:
Код

using (StreamWriter sw = new StreamWriter(path))
           {
               sw.WriteLine("This");
               sw.WriteLine("is some text");
               sw.WriteLine("to test");
               sw.WriteLine("Reading");
           }



поковырямшись в инете нашел еще кучу классов, и основательно в них запутался. Хотелось бы проконсультироваться, что мне лучше юзать для решения следующей задачи:

I. можно работать с файлом последовательного доступа, тогда

1. я должен иметь возможность считать символ с определенным
порядковым номером. Только один символ. Считать в
оперативку весь файл и затем найти нужный символ методом
тотального перебора — такое некатит.

2. Должна быть возможность записи символа в место, определенное
порядковым номером этого символа. Если на этом месте уже есть
символ, то он должен быть перезаписан.

II. Если ничего подобного нет при работе с файлами последовательного
доступа, то придется воспользоваться файлом произвольного доступа,
но никакой информации по работе с файлами произвольного доступа
я пока не нашел. Не хотелось бы усложнять программку базой данных.

III. Еще хотелось бы выяснить, можно ли записать в файл не символ или байт,
а один бит, т. е. единичку или нолик?


PM MAIL   Вверх
Domestic Cat
Дата 24.1.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Посмотри FileStream.


--------------------

PM   Вверх
[Last]Wizard
Дата 24.1.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

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



Цитата(Domestic @ 24.1.2005, 07:49)
Посмотри FileStream.

Это точно smile

Вот тебе пример:
Код
// Открываем файл на чтение и запись:
FileStream fs = new FileStream(@"C:\MyFile.txt", FileMode.Open, FileAccess.ReadWrite);

// Читаем 12-й байт от начала: (нумерация с нуля)
fs.Seek(11, SeekOrigin.Begin);
byte b = (byte)fs.ReadByte();

// Записываем его на место 4-го байта от конца: (нумерация с -1)
fs.Seek(-4, SeekOrigin.End);
fs.WriteByte(b);

// Закрываем файл:
fs.Close();


Насчет побитовой записи ничего не знаю, но в принципе можно реализовать через чтение и запись байтов.

PM ICQ   Вверх
akaineco
Дата 25.1.2005, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Через FileStream мы читаем байты, т. е. фактически числа.

Код

using(FileStream fs = new FileStream("TestFile.txt", FileMode.Open, FileAccess.Write ))
  {
   byte a = new byte ();
   
   a=0;
   fs.Seek(0, SeekOrigin.Begin);
   fs.WriteByte (a);
   fs.Seek(1, SeekOrigin.Begin);
   a=1;
   fs.WriteByte (a);
   fs.Seek(2, SeekOrigin.Begin);
   a=2;
   fs.WriteByte (a);
   fs.Close();
  }
  using(FileStream fsr = new FileStream("TestFile.txt", FileMode.Open, FileAccess.Read  ))
  {
   
   fsr.Seek(2, SeekOrigin.Begin);
   //в текстовое поле выводиться число.
   textBox1.Text =fsr.ReadByte ().ToString();
   fsr.Close();
  }

А как насчет букв и символов? Есть еще BinaryWriter BinaryReader.
Код

FileStream fse = new FileStream("TestFile.txt", FileMode.Open, FileAccess.Write );
 
  BinaryWriter bw = new BinaryWriter(fse);
   
   
    char a = new char ();
    a='6';
    bw.Seek(0, SeekOrigin.Begin);
    bw.Write  (a);
    bw.Seek(1, SeekOrigin.Begin);
    a='1';
    bw.Write (a);
    bw.Seek(2, SeekOrigin.Begin);
    a='2';
    bw.Write (a);

 
   fse.Close();
FileStream fse2 = new FileStream("TestFile.txt", FileMode.Open, FileAccess.Read );
  BinaryReader br = new BinaryReader(fse2);
  textBox1.Text = br.ReadChar().ToString ();
   fse2.Close();

записываем без проблем, а куда при чтении у fse2 метод seek девался? - Слоники снюхали?
приходиться читать попорядку одного за другим. Или может следует считать сначала быйт, а затем есть какой-то способ перевести его в конкретный символ ?
Цитата
Насчет побитовой записи ничего не знаю, но в принципе можно реализовать через чтение и запись байтов.


да, я тоже об этом думал.
PM MAIL   Вверх
Gazon
Дата 25.1.2005, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
А как насчет букв и символов?

Используй StreamReader.
Код
using(StreamReader fs = File.OpenText("D:\\Text.txt"))
      {
       string temp;
        while((temp=fs.ReadLine())!=null)
                                                                        ....
       }


Это сообщение отредактировал(а) Gazon - 25.1.2005, 05:27
--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
akaineco
Дата 26.1.2005, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
using(StreamReader fs = File.OpenText("D:\\Text.txt"))
{
string temp;
while((temp=fs.ReadLine())!=null)
}

че-то не Компилируется.

Цитата
Используй StreamReader.

но мне нужно только символ считать, а ReadLine читает строку, причем с начала файла, а не с произвольного места. Есть еще метод read, который читает файл в массив. Если массив сделать величиной в один символ, то можно считать символ, но не с произвольной позиции:

Код

using (StreamReader sr = new StreamReader("MyTest.txt"))
  {
   char[] c = null;
   c = new char[1];
   sr.Read(c, 0, 1);
   //где 0-позиция в массиве в которую считываются символы. 1-количество
   //считываемых в массив символов.
   textBox1.Text =c[0].ToString ();
  }

метод seek отсутствует. А при записи методом write происходит полная перезапись всего файла. Старые даные не сохраняются, чего мне совсем не надо:
Код

using (StreamWriter sw = new StreamWriter("MyTest.txt"))
  {
   char[] c = new char[1];
   c[0]='w';
   sw.Write (c, 0, 1);
  }


А как же посредством StreamReader, считать один символ с произвольной позиции в файле?

PM MAIL   Вверх
akaineco
Дата 27.1.2005, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну ладно. На самом деле того, что уже есть, мне вполне хватит. Ситуация более или менее прояснилась. FileStream мне больше всего подойдет. Спасибо всем за участие и посильную помощь. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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