文件流和CRLF分隔符?

时间:2015-10-26 10:10:16

标签: c# stream

我有Filestream,我正在阅读文件。

分隔符为CRLF,我想直到CRLF才能阅读。

如何使用Filestream执行此操作? Filestream是否是正确的选择?

我对readallLines或类似的方法并不感兴趣,因为你必须将所有文件加载到内存中。

主要优先考虑的是内存效率。

1 个答案:

答案 0 :(得分:1)

你发表评论会大大改变这个问题;所以你有一个打开 FileStream,你想在其中找到下一个CRLF ('\r\n');在这种情况下,可以实现类似的东西:

   private static long GetNextCRLFPosition(FileStream stream) {
     try {
       long savedPosition = fs.Position;

       // ReadByte - we're working with binary file...
       for (int item = fs.ReadByte(); item >= 0; item = fs.ReadByte()) {
         if (item == '\r') {
           item = fs.ReadByte();

           if (item == '\n') 
             return fs.Position - 2;
           else 
             fs.Seek(-1, SeekOrigin.Current); 
         }
       }     

       return -1; 
     }
     finally {
       fs.Seek(savedPosition, SeekOrigin.Begin);
     }
   }

   ...  

   using (FileStream fs = new FileStream(@"C:\MyFile.Text", FileMode.Open)) {
     ...
     // The next "\r\n" is in shift bytes
     long shift = GetNextCRLFPosition(fs);     
     ...
   }