FileStream Аргументы Чтение / Запись - PullRequest
4 голосов
/ 11 января 2011

В C ++ вы открываете поток следующим образом:

int variable = 45;

ifstream iFile = new ifstream("nameoffile"); // Declare + Open the Stream
       // iFile.open("nameofIle");

iFile >> variable;

iFile.close

Я пытаюсь понять C # FileStream. Методы чтения и записи требуют массив, смещение и счет. Этот массив, насколько большой массив? Должен ли я дать ему какой-либо размер, и он заполнит его? Если это так, как мне прочитать файл с Filestream? Как мне узнать, насколько большой массив я передаю?

Ответы [ 4 ]

7 голосов
/ 11 января 2011

Вы можете просто использовать StreamReader и StreamWriter оболочки для чтения и записи:

using(StreamReader sr = new StreamReader(fileName))
{
   var value = sr.ReadLine(); // and other methods for reading
}



using (StreamWriter sw = new StreamWriter(fileName)) // or new StreamWriter(fileName,true); for appending available file
{
  sw.WriteLine("test"); // and other methods for writing
}

или сделать следующее:

StreamWriter sw = new StreamWriter(fileName);
sw.WriteLine("test");
sw.Close();
2 голосов
/ 11 января 2011
using (FileStream fs = new FileStream("Filename", FileMode.Open))
        {
            byte[] buff = new byte[fs.Length];
            fs.Read(buff, 0, (int)fs.Length);                
        }

Обратите внимание, что fs.Length является длинным, и поэтому вы должны проверить его как int.MaxValue

В противном случае вы используете старый метод в цикле while (fs.Read возвращает фактическийколичество прочитанных байтов)

Между прочим, FileStream НЕ заполнит его, а вместо этого выдаст исключение.

1 голос
/ 11 января 2011

Массив байтов в аргументах метода чтения FileStream будет получать байты из потока после чтения, поэтому длина должна быть равна длине потока.От MSDN :

using (FileStream fsSource = new FileStream(pathSource,
            FileMode.Open, FileAccess.Read))
        {

            // Read the source file into a byte array.
            byte[] bytes = new byte[fsSource.Length];
            int numBytesToRead = (int)fsSource.Length;
            int numBytesRead = 0;
            while (numBytesToRead > 0)
            {
                // Read may return anything from 0 to numBytesToRead.
                int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                // Break when the end of the file is reached.
                if (n == 0)
                    break;

                numBytesRead += n;
                numBytesToRead -= n;
            }
             numBytesToRead = bytes.Length;

            // Write the byte array to the other FileStream.
            using (FileStream fsNew = new FileStream(pathNew,
                FileMode.Create, FileAccess.Write))
            {
                fsNew.Write(bytes, 0, numBytesToRead);
            }
        }

Для чтения текста из потока используется потоковый ридер

1 голос
/ 11 января 2011

При вызове метода .Read необходимо указать и массив, в котором будут храниться результирующие байты.Таким образом, длина этого массива должна быть не меньше (индекс + размер).Во время записи та же проблема, за исключением того, что эти байты будут получены из массива, а не сохранены внутри него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...