Как читать несколько файлов TXT C # - PullRequest
1 голос
/ 13 марта 2019

Привет. Я пытаюсь прочитать 2 txt-файла из веб-службы asmx, причина в том, что в файле 1 есть случайные буквы, из которых я должен найти подходящие слова из файла 2. Но я не знаю, как это сделать.прочитайте файлы.

это веб-сервис. Так я и делаю.Идея состоит в том, чтобы прочитать первый файл и получить маршруты для других, которые вы прочитали, и добавить их в список, но если у вас есть другая идея, я был бы признателен, если бы поделился

namespace NewShoreApp
{        
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    public class WebService : System.Web.Services.WebService
    {

        [WebMethod]
        public string ReadData()
        {

            string[] lines = File.ReadAllLines(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\CONTENIDO.txt");

            List<string> list = new List<string>();

            foreach (var line in lines)
            {

                string data= File.ReadAllLines(line); //'Cannot implicitly convert type string[] to string'

                list.AddRange(data); //Cannot convert from string to system.collections.generic IEnumerable<string>
            }

                return ".";                        
            }
    }
}

, это контроллер, на котором язагрузить файлы и добавить их в массив.

namespace NewShoreApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            return View();
        }


        [HttpPost]
        public ActionResult Index(HttpPostedFileBase[] files)
        {

            if (ModelState.IsValid)
            {
                try
                {
                    foreach (HttpPostedFileBase file in files)
                    {
                        if (file != null)
                        {
                            var ServerPath = Path.Combine(Server.MapPath("~/Data"), Path.GetFileName(file.FileName));

                            file.SaveAs(ServerPath);
                        }
                    }                    
                    ViewBag.FileStatus = "File uploaded successfully.";
                }

                catch (Exception)   
                {

                    ViewBag.FileStatus = "Error while file uploading.";
                }

            }
            return View("Index");
        }

    }
}

это модель

namespace NewShoreApp.Models
{
    public class Data
    {
        // 
        [DataType(DataType.Upload)]
        [Display(Name = "Upload File")]
        [Required(ErrorMessage = "Please choose file to upload.")]
        public HttpPostedFileBase[] files { get; set; }

    }
}

Ответы [ 3 ]

3 голосов
/ 14 марта 2019

Проблема возникла из-за того, что File.ReadAllLines() возвращает массив строк (string[]), вы можете преобразовать его в List<string>, используя ToList() метод:

string[] lines = File.ReadAllLines(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\CONTENIDO.txt");

List<string> list = lines.ToList();

Если вы хотите прочитать несколько файлов в одной папке и добавить все содержимое в список строк, используйте Directory.GetFiles() или Directory.EnumerateFiles() и повторяйте пути к каждому файлу до используя ReadAllLines():

List<string> paths = Directory.EnumerateFiles(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\", "*.txt").ToList();

foreach (string filePath in paths)
{
    string[] lines = File.ReadAllLines(filePath);

    list.AddRange(lines.ToList());
}

В многопоточной среде следует рассмотреть возможность использования Parallel.ForEach с настройкой, аналогичной описанной выше, над foreach loop:

List<string> paths = Directory.EnumerateFiles(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\", "*.txt").ToList();
Parallel.ForEach(paths, current => 
{
    string[] lines = File.ReadAllLines(current);

    list.AddRange(lines.ToList());
});
2 голосов
/ 13 марта 2019

Если проблема в этой строке:

string data= File.ReadAllLines(line); //'Cannot implicitly convert type string[] to string'

Переменная lines - это массив каждой строки в виде строки, которую вы уже назвали выше.

Просто приведите массив строк в список, если вы хотите список строк:

var list = new List<string>(data); 
2 голосов
/ 13 марта 2019

Лучший способ параллельного чтения нескольких текстовых файлов - использование ThreadPool.

ThreadPool.QueueUserWorkItem(ReadFile, path);

, а метод ReadFile здесь

public static void ReadFile(Object path)
{
 string content = File.ReadAllLines(@path)
 // do what you need 
}
...