2011-01-11 2 views
4

В C++, вы открываете поток таким образом:FileStream Аргументы Read/Write

int variable = 45; 

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

iFile >> variable; 

iFile.close 

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

ответ

7

Вы можете просто использовать 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
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 < fs.Length.

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

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

1

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

1

Байт-массив в аргументах метода чтения 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); 
      } 
     } 

StreamReader используется для чтения текста из потока

Смежные вопросы