2015-03-06 3 views
1

У меня возникает путаница в понимании взаимосвязи между объектами fs и объектом sw в следующей строке кода.Файлы: Filestream и StreamWriter Wrapper Class

StreamWriter sw = новый StreamWriter (fs);

Путаница в понимании того,

1> Является Sw просто указывает на объект фс 2>, когда фс передается в качестве параметра StreamWriter конструктора, члены инициализируются к содержанию объекта фс.

Пожалуйста, подробно объясните механизм, как класс FileStream и класс StreamWriter выполняют задачу с помощью ссылок на объекты fs и sw.

 using System; 

    using System.IO; 

    class File_Write 
     { 
      public void Write_Data() 
      { 

       int empid = 12; 
       string empname = "sean"; 



      FileStream fs = new FileStream("E:\\Files_Demo\\File_Write.txt", FileMode.Create, 
       FileAccess.Write, FileShare.None); 

      StreamWriter sw = new StreamWriter(fs) 
      { 
       sw.WriteLine("Good Morning"); 
       sw.WriteLine("Provide_EmployeeDetails"); 

       sw.WriteLine("Employee Id={0}", empid); 


       Console.WriteLine("Written to file...Success"); 
       Console.Read(); 


      } 
     } 
+0

Связанный Вопрос: http://stackoverflow.com/questions/5144794/what-does-stream-means-what-are-its-characteristics –

+0

msdn Объяснение файлов и потоков: https://msdn.microsoft. com/en-us/library/k3352a4t (v = vs.110) .aspx –

ответ

3

Stream просто последовательность байтов, которые вы можете читать, писать, и/или стремятся (в зависимости от типа потока). Это просто сырые двоичные данные, без знания того, что означает данные и как их обрабатывать.

A StreamWriter используется для записи текста в потоке с использованием указанной текстовой кодировки (по умолчанию UTF-8). Ввод текста непосредственно на Stream без использования StreamWriter можно, но не очень удобно (нужно будет вручную преобразовать строку в байтах)

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

1> Является Sw просто указывает на объект фс

Он содержит ссылку на него, да.

2> Когда fs передается как параметр конструктору StreamWriter, члены которого инициализируются содержимым объекта fs.

fs не имеет содержания; это всего лишь способ доступа к базовым данным (в данном случае, к файлу на диске). Таким образом, StreamWriter не «инициализируется содержимым объекта fs»; он просто хранит ссылку на fs, чтобы впоследствии ее можно было обработать.

+0

Я знаю, что, как бы то ни было, почему fs поэтапно передается в качестве конструктора streamwriter. –

+0

Я собираюсь угадать, что если OP не понимает файлы и потоки, они, вероятно, также будут бороться с кодировкой текста. –

+1

@Gt_R, так как 'StreamWriter' пишет в' Stream', вам нужно дать ему «Stream», когда вы его создадите. Передача 'fs' в конструктор' StreamWriter' означает, что писатель будет писать на 'fs'. –

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