Read the given filename and yield return a string
// crudwork // Copyright 2004 by Steve T. Pham (http://www.crudwork.com) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with This program. If not, see <http://www.gnu.org/licenses/>. using System; using System.Collections.Generic; using System.IO; using System.Text; using System.CodeDom.Compiler; using System.Text.RegularExpressions; namespace crudwork.Utilities { /// <summary> /// File Utility /// </summary> public static class FileUtil { #region ReadFile methods ///// <summary> ///// Read content of file and store into a string array. ///// </summary> ///// <param name="filename"></param> ///// <returns></returns> //public static string[] ReadFile(string filename) //{ // try // { // List<String> results = new List<string>(); // using (StreamReader r = new StreamReader(filename)) // { // while (!r.EndOfStream) // { // results.Add(r.ReadLine()); // } // r.Close(); // } // return results.ToArray(); // } // catch (Exception ex) // { // DebuggerTool.AddData(ex, "filename", filename); // throw; // } //} /// <summary> /// Read the given filename and yield return a string /// </summary> /// <param name="filename"></param> /// <returns></returns> public static IEnumerable<string> ReadFile(string filename) { using (StreamReader r = new StreamReader(filename)) { while (!r.EndOfStream) { string line = r.ReadLine(); yield return line; } r.Close(); } yield break; } ///// <summary> ///// Read the given filename and return a byte array ///// </summary> ///// <param name="filename"></param> ///// <param name="bufSize"></param> ///// <returns></returns> //public static byte[] ReadFile(string filename, int bufSize) //{ // StringBuilder s = new StringBuilder(); // List<byte> results = null; // using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, bufSize)) // using (BinaryReader r = new BinaryReader(fs)) // { // results = new List<byte>((int)fs.Length); // byte[] readChar = null; // do // { // readChar = r.ReadBytes(bufSize); // results.AddRange(readChar); // } while ((readChar != null) && (readChar.Length > 0)); // r.Close(); // fs.Close(); // } // return results.ToArray(); //} /// <summary> /// Read the filename and yield return a byte array /// </summary> /// <param name="filename"></param> /// <param name="bufSize"></param> /// <returns></returns> public static IEnumerable<byte[]> ReadFile(string filename, int bufSize) { return ReadFile(filename, bufSize, 0); } /// <summary> /// Read the filename, start a the specified position, and yield return a byte array /// </summary> /// <param name="filename">type input file</param> /// <param name="bufSize">this bufSize will be multiple by 10</param> /// <param name="startAtPosition">set the starting position</param> /// <returns></returns> public static IEnumerable<byte[]> ReadFile(string filename, int bufSize, int startAtPosition) { using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, bufSize * 10)) using (BinaryReader r = new BinaryReader(fs)) { fs.Position = startAtPosition; byte[] readChar = null; do { readChar = r.ReadBytes(bufSize); if (readChar != null) yield return readChar; } while ((readChar != null) && (readChar.Length > 0)); r.Close(); fs.Close(); } yield break; } #endregion } }