Как прочитать весь файл в строке с помощью C #?

Каков самый быстрый способ прочитать текстовый файл в строковой переменной?

Я понимаю, что это можно сделать несколькими способами, такими как чтение отдельных байтов, а затем преобразование их в строку. Я искал метод с минимальным кодированием.

Как насчет

string contents = File.ReadAllText(@"C:\temp\test.txt"); 

Сравнительное сравнение File.ReadAllLines StreamReader ReadLine с обработкой файлов C #

Сравнение файлов

Результаты. StreamReader намного быстрее для больших файлов с более чем 10 000 строк, но разница в меньших файлах незначительна. Как всегда, планируйте различные размеры файлов и используйте File.ReadAllLines только тогда, когда производительность не является критичной.

Подход StreamReader

Поскольку подход File.ReadAllText был предложен другими, вы также можете попробовать быстрее (я не тестировал количественное влияние производительности, но он, кажется, быстрее, чем File.ReadAllText (см. Сравнение ниже)). Разница в производительности будет видна только в случае больших файлов.

 string readContents; using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8)) { readContents = streamReader.ReadToEnd(); } 

Сравнение File.Readxxx () и StreamReader.Readxxx ()

Просмотр индикативного кода через ILSpy Я нашел следующее о File.ReadAllLines , File.ReadAllText .

  • File.ReadAllText – использует StreamReader.ReadToEnd внутренне
  • File.ReadAllLines – также использует StreamReader.ReadLine внутренне с дополнительными накладными расходами на создание List для возврата в виде строк чтения и циклизации до конца файла.

Таким образом, оба метода – дополнительный уровень удобства, построенный поверх StreamReader . Это видно из показательного тела метода.

File.ReadAllText() как декомпилированная ILSpy

 public static string ReadAllText(string path) { if (path == null) { throw new ArgumentNullException("path"); } if (path.Length == 0) { throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath")); } return File.InternalReadAllText(path, Encoding.UTF8); } private static string InternalReadAllText(string path, Encoding encoding) { string result; using (StreamReader streamReader = new StreamReader(path, encoding)) { result = streamReader.ReadToEnd(); } return result; } 
 string contents = System.IO.File.ReadAllText(path) 

Вот документация MSDN

Взгляните на метод File.ReadAllText ()

Некоторые важные замечания:

Этот метод открывает файл, считывает каждую строку файла и затем добавляет каждую строку как элемент строки. Затем он закрывает файл. Строка определяется как последовательность символов, за которой следует возврат каретки (‘\ r’), фид строки (‘\ n’) или возврат каретки, за которым следует строка. Полученная строка не содержит завершающего возврата каретки и / или линии.

Этот метод пытается автоматически определить кодировку файла на основе наличия меток байтового порядка. Могут быть обнаружены форматы кодирования UTF-8 и UTF-32 (как для больших, так и для малых чисел).

Используйте метод ReadAllText (String, Encoding) при чтении файлов, которые могут содержать импортированный текст, поскольку непризнанные символы могут быть неправильно прочитаны.

Этот дескриптор файла гарантированно закрывается этим методом, даже если возникают исключения

string text = File.ReadAllText("Path"); у вас есть весь текст в одной строковой переменной. Если вам нужна каждая строка отдельно, вы можете использовать это:

 string[] lines = File.ReadAllLines("Path"); 

@ Крис извините. Это цитата из MSDN Microsoft

методология

В этом эксперименте будут сравниваться два classа. Класс StreamReader и FileStream будет направлен на чтение двух файлов из 10K и 200K полностью из каталога приложений.

 StreamReader (VB.NET) sr = New StreamReader(strFileName) Do line = sr.ReadLine() Loop Until line Is Nothing sr.Close() FileStream (VB.NET) Dim fs As FileStream Dim temp As UTF8Encoding = New UTF8Encoding(True) Dim b(1024) As Byte fs = File.OpenRead(strFileName) Do While fs.Read(b, 0, b.Length) > 0 temp.GetString(b, 0, b.Length) Loop fs.Close() 

результат

введите описание изображения здесь

FileStream , очевидно, быстрее в этом тесте. StreamReader требует еще 50% времени для чтения небольшого файла. Для большого файла потребовалось еще 27% времени.

StreamReader специально ищет разрывы строк, в то время как FileStream этого не делает. Это объясняет некоторое дополнительное время.

рекомендации

В зависимости от того, что приложение должно делать с разделом данных, может потребоваться дополнительный синтаксический анализ, который потребует дополнительного времени обработки. Рассмотрим сценарий, в котором файл имеет столбцы данных, а строки ограничены CR/LF . StreamReader будет работать над текстом, ищущим CR/LF , а затем приложение будет выполнять дополнительный синтаксический анализ, ищущий конкретное местоположение данных. (Вы считали, что String. SubString поставляется без цены?)

С другой стороны, FileStream считывает данные в кусках, а проактивный разработчик может написать немного больше логики, чтобы использовать stream в свою пользу. Если необходимые данные находятся в определенных позициях в файле, это, безусловно, путь, так как он уменьшает использование памяти.

FileStream – лучший механизм для скорости, но требует большей логики.

 System.IO.StreamReader myFile = new System.IO.StreamReader("c:\\test.txt"); string myString = myFile.ReadToEnd(); 

ну, самый быстрый способ с наименьшим возможным кодом C #, вероятно, следующий:

 string readText = System.IO.File.ReadAllText(path); 

если вы хотите выбрать файл из папки Bin приложения, вы можете попробовать следовать и не забывать делать обработку исключений.

 string content = File.ReadAllText(Path.Combine(System.IO.Directory.GetCurrentDirectory(), @"FilesFolder\Sample.txt")); 
 string content = System.IO.File.ReadAllText( @"C:\file.txt" ); 

Для noobs, которые считают этот материал интересным и интересным, самый быстрый способ чтения целого файла в строку в большинстве случаев (в соответствии с этими критериями ) заключается в следующем:

 using (StreamReader sr = File.OpenText(fileName)) { string s = sr.ReadToEnd(); } //you then have to process the string 

Тем не менее, абсолютное наиболее быстрое чтение текстового файла в целом выглядит следующим образом:

 using (StreamReader sr = File.OpenText(fileName)) { string s = String.Empty; while ((s = sr.ReadLine()) != null) { //do what you have to here } } 

Положив против нескольких других методов , он выиграл большую часть времени, в том числе против BufferedReader.

вы можете использовать :

  public static void ReadFileToEnd() { try { //provide to reader your complete text file using (StreamReader sr = new StreamReader("TestFile.txt")) { String line = sr.ReadToEnd(); Console.WriteLine(line); } } catch (Exception e) { Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } } 

Вы можете так использовать

 public static string ReadFileAndFetchStringInSingleLine(string file) { StringBuilder sb; try { sb = new StringBuilder(); using (FileStream fs = File.Open(file, FileMode.Open)) { using (BufferedStream bs = new BufferedStream(fs)) { using (StreamReader sr = new StreamReader(bs)) { string str; while ((str = sr.ReadLine()) != null) { sb.Append(str); } } } } return sb.ToString(); } catch (Exception ex) { return ""; } } 

Надеюсь, что это поможет вам.

вы можете читать текст из текстового файла в строку следующим образом.

 string str = ""; StreamReader sr = new StreamReader(Application.StartupPath + "\\Sample.txt"); while(sr.Peek() != -1) { str = str + sr.ReadLine(); } 
 public partial class Testfile : System.Web.UI.Page { public delegate void DelegateWriteToDB(string Inputstring); protected void Page_Load(object sender, EventArgs e) { getcontent(@"C:\Working\Teradata\New folder"); } private void SendDataToDB(string data) { //InsertIntoData //Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=kannan;Data Source=jaya; SqlConnection Conn = new SqlConnection("Data Source=aras;Initial Catalog=kannan;Integrated Security=true;"); SqlCommand cmd = new SqlCommand(); cmd.Connection = Conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "insert into test_file values('"+data+"')"; cmd.Connection.Open(); cmd.ExecuteNonQuery(); cmd.Connection.Close(); } private void getcontent(string path) { string[] files; files = Directory.GetFiles(path, "*.txt"); StringBuilder sbData = new StringBuilder(); StringBuilder sbErrorData = new StringBuilder(); Testfile df = new Testfile(); DelegateWriteToDB objDelegate = new DelegateWriteToDB(df.SendDataToDB); //dt.Columns.Add("Data",Type.GetType("System.String")); foreach (string file in files) { using (StreamReader sr = new StreamReader(file)) { String line; int linelength; string space = string.Empty; // Read and display lines from the file until the end of // the file is reached. while ((line = sr.ReadLine()) != null) { linelength = line.Length; switch (linelength) { case 5: space = " "; break; } if (linelength == 5) { IAsyncResult ObjAsynch = objDelegate.BeginInvoke(line + space, null, null); } else if (linelength == 10) { IAsyncResult ObjAsynch = objDelegate.BeginInvoke(line , null, null); } } } } } } 

Я сделал сравнение между ReadAllText и StreamBuffer для 2Mb csv, и казалось, что разница была довольно небольшой, но ReadAllText, казалось, взял верх от времени, затраченного на выполнение функций.

  • В C #, почему String является ссылочным типом, который ведет себя как тип значения?
  • Как преобразовать / разобрать из String в char в java?
  • C - зачем нужен strcpy ()
  • Как вы получаете строку из MemoryStream?
  • Может ли действующая строка Unicode содержать FFFF? Является ли Java / CharacterIterator нарушенным?
  • Как взорвать вектор строк в строку (элегантный способ)
  • Разделение строки на каждый n-й символ
  • Проблема сортировки строк в C #
  • Неизвестная escape-последовательность для строки пути, содержащей обратную косую черту
  • Как отсортировать список адресов Ip с помощью c #
  • Бинарный текст в Java
  • Interesting Posts

    Как объединить данные из нескольких файлов Excel в один файл Excel или базу данных Access?

    Hibernate Проверка коллекций примитивов

    Как устранить ошибку «Не удается найти модуль» с помощью Node.js?

    Не удается подключиться к компьютеру Windows для совместного использования файлов

    Могут ли приложения загружаться в Windows?

    Построение доверительных интервалов

    Обработать функцию onclick после вызова ajax

    Расширенный MySql-запрос: обновить таблицу с информацией из другой таблицы

    Увеличьте клиентский предел Wi-Fi Huawei EC5805

    Как Java разрешает относительный путь в новом файле ()?

    Вкладка + Ввод больше не приводит меня к первому результату поиска Google в Chrome

    Я хочу получить текущее время на Java, но без Интернета и без системного времени

    Как я могу динамически установить позицию представления в Android?

    Xcode 5: ошибки при подписании кода

    Как перевести эту обработку изображений из Matlab в OpenCV?

    Давайте будем гением компьютера.