Есть ли способ прочитать много файлов и сохранить значения массива или списка в C #? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь прочитать данные всех файлов через цикл, но есть проблема с запуском программы?

Метеорологический справочник

        string filePath = @"C:\Meteo\*.dat";

        List<string> lines =  File.ReadAllLines(filePath).ToList();

        foreach (string line in lines)
        {
            MessageBox.Show(line);
        }

Вывод:

************** Exception Text **************
System.ArgumentException: Illegal characters in path.
   at System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path, Encoding encoding)
   at System.IO.File.InternalReadAllLines(String path, Encoding encoding)
   at System.IO.File.ReadAllLines(String path)
   at WindowsFormsApp1.frm_main.frm_main_Load(Object sender, EventArgs e) in C:\Users\admin\Desktop\WindowsFormsApp1\WindowsFormsApp1\WindowsFormsApp1\frm_main.cs:line 103
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Файлы выглядят так: .dat file

1 Ответ

1 голос
/ 30 мая 2019

Вам следует перечислить файлов:

var files = Directory.EnumerateFiles(@"C:\Meteo", "*.dat");

Тогда вы можете использовать SelectMany, если хотите склеить строки файлов:

// all lines of all *.dat files in the single list
List<string> lines = Directory
  .EnumerateFiles(@"C:\Meteo", "*.dat")
  .SelectMany(file => File.ReadLines(file))
  .ToList();

Или вы можете обработать каждый файл в цикле :

foreach (string file in Directory.EnumerateFiles(@"C:\Meteo", "*.dat")) {
  //TODO: process the file here
}

Редактировать: Давайте обработаем каждый файл в цикле (см. Комментарии ниже)

// for each file
foreach (string file in Directory.EnumerateFiles(@"C:\Meteo", "*.dat")) {
  // read each line
  foreach (string line in File.ReadLines(file)) {
    // and show file name and line in a message box
    MessageBox.Show(line, file);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...