Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 19:42   #21
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Мне нужно прочитать ровно 11 байт из файла в String
Если вы пытаетесь прочитать набор байт в строку, то, я так понимаю, предполагается, что 1 байт соответствует 1 символу, т.е. кодировка ASCII или UTF8. (Если нет поправьте)

Если требуется прочитать набор байт, то подойдет следующий код:
Код:
static void DataReading()
        {
            try
            {
                FileStream FStream = new FileStream("input.txt", FileMode.Open, FileAccess.Read);
                BinaryReader FBinReader = new BinaryReader(FStream);

                char[] char_array = null;
                String str = null;

                FStream.Position = 0; // позиция, с которой читаем 
                char_array = FBinReader.ReadChars(2); // сколько символов читает - 2 символа.
                str = new String(char_array);
                Console.WriteLine(str);

                byte b = FBinReader.ReadByte();
                Console.WriteLine("n: {0}", b);

                //FStream.Position = 4;
                char_array = FBinReader.ReadChars(3);
                str = new String(char_array);
                Console.WriteLine(str);

                FStream.Position = 0;
                char_array = FBinReader.ReadChars(4);
                str = new String(char_array);
                Console.WriteLine(str);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }
        }
Возможно, я не совсем понял, что требуется, тогда уточните.

Цитата:
В продолжение темы: можно ли как-нибудь одной функцией обнулить char[]? Или только присваивать нули в цикле?
Так можно очистить char[]:
Код:
  char[] char_array = new char[5];
  if (char_array != null) // char_array должен быть создан
    Array.Clear(char_array, 0, char_array.Length);
Цитата:
Даже если я что-то делаю не так - меня удивляет, что нигде нет информации по этой теме (совместное использование StreamReader и BinaryReader).
Вопрос в том: А зачем использовать совместно StreamReader и BinaryReader?
Думаю, следует выбрать что-то одно.
Может, проблема в не вполне верном подходе в формату хранения данных в файле.
Цитата:
(точнее, в DataGridView::Rows[0]::Cells[0])
Если в файле хранятся строки, то их и следует записывать в файл как строки, а затем читать как строки так: FTextReader.ReadLine(); или так: FBinReader.ReadString();
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 03.09.2009, 15:59   #22
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Огромное спасибо Daramant и alexBlack (писал в ЛС). Похоже, наконец, начинает получаться по-нормальному.

У меня такой вариант.
Код:
using System;
using System.IO;

namespace ConsoleApplication1
{
	class Program
	{
		static void Main (string[] args)
		{
			try
			{
				FileStream FStream = new FileStream ("input.txt", FileMode.Open, FileAccess.Read);
				BinaryReader FBinReader = new BinaryReader (FStream, System.Text.Encoding.GetEncoding(866));
				byte n;
				char[] buff = new char[10];

				for (int i = 0; i < 12; i++)
				{
					n = FBinReader.ReadByte();
					Console.WriteLine ("{0}	({1})	{2}", i, FStream.Position, n);					
					buff = FBinReader.ReadChars (3);
					Console.WriteLine ("{0}	({1})	{2}", i, FStream.Position, (new string(buff)));
				}
				FBinReader.Close();
				FStream.Close();
			}
			catch (Exception exc)
			{
				Console.WriteLine (exc.Message);
			}

			Console.ReadKey();
		}
	}
}
В MSDN написано:
Цитата:
BinaryReader.ReadChars Method

Reads count characters from the current stream, returns the data in a character array, and advances the current position in accordance with the Encoding used and the specific character being read from the stream.
Как можно выбрать кодировку, в которой читать файл?

Последний раз редактировалось ds.Dante; 03.09.2009 в 16:13.
ds.Dante вне форума Ответить с цитированием
Старый 03.09.2009, 16:08   #23
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Все, понял, в конструкторе BinaryReader. Исправил предыдущий пост (досовская кодировка).
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами Rom@shka Общие вопросы C/C++ 2 13.12.2008 16:40
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? SkAndrew Общие вопросы Delphi 2 10.11.2008 22:14
Прочитать строку до конца Иллидан Общие вопросы C/C++ 3 28.09.2008 02:21
Не получается прочитать из файла...( Regloger Помощь студентам 3 09.12.2007 14:23
Как мне в асме прочитать данные из файла? lelicman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.10.2007 09:24