如何读取多个文件txt c#
how to read multiple files txt c#
你好我正在尝试从 asmx 网络服务读取 2 个 txt 文件,原因是在文件 1 中我有随机字母,我必须从文件 2 中找到匹配的单词。但我不知道如何读取文件。
这就是 webService.This 我的做法。这个想法是读取第一个文件并获取到其他文件的路由,您读取这些文件并将它们添加到列表中,但如果您有其他想法,我将不胜感激分享
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; }
}
}
并行读取多个 txt 文件的最佳方式是使用线程池。
ThreadPool.QueueUserWorkItem(ReadFile, path);
ReadFile 方法在这里
public static void ReadFile(Object path)
{
string content = File.ReadAllLines(@path)
// do what you need
}
如果问题出在这一行:
string data= File.ReadAllLines(line); //'Cannot implicitly convert type string[] to string'
变量 lines 是每行作为字符串的数组,您已经在上面调用了。
如果需要行列表,只需将行数组转换为列表即可:
var list = new List<string>(data);
出现问题是因为File.ReadAllLines()
returns 字符串数组(string[]
),你可以使用ToList()
方法将其转换为List<string>
:
string[] lines = File.ReadAllLines(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\CONTENIDO.txt");
List<string> list = lines.ToList();
如果要读取同一文件夹中的多个文件并将所有内容添加到字符串列表,请使用 Directory.GetFiles()
or 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());
}
在多线程环境中,您应该考虑在 foreach
循环中使用 Parallel.ForEach
与上面类似的设置:
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());
});
你好我正在尝试从 asmx 网络服务读取 2 个 txt 文件,原因是在文件 1 中我有随机字母,我必须从文件 2 中找到匹配的单词。但我不知道如何读取文件。
这就是 webService.This 我的做法。这个想法是读取第一个文件并获取到其他文件的路由,您读取这些文件并将它们添加到列表中,但如果您有其他想法,我将不胜感激分享
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; }
}
}
并行读取多个 txt 文件的最佳方式是使用线程池。
ThreadPool.QueueUserWorkItem(ReadFile, path);
ReadFile 方法在这里
public static void ReadFile(Object path)
{
string content = File.ReadAllLines(@path)
// do what you need
}
如果问题出在这一行:
string data= File.ReadAllLines(line); //'Cannot implicitly convert type string[] to string'
变量 lines 是每行作为字符串的数组,您已经在上面调用了。
如果需要行列表,只需将行数组转换为列表即可:
var list = new List<string>(data);
出现问题是因为File.ReadAllLines()
returns 字符串数组(string[]
),你可以使用ToList()
方法将其转换为List<string>
:
string[] lines = File.ReadAllLines(@"C:\Users\thoma\source\repos\NewShoreApp\NewShoreApp\Data\CONTENIDO.txt");
List<string> list = lines.ToList();
如果要读取同一文件夹中的多个文件并将所有内容添加到字符串列表,请使用 Directory.GetFiles()
or 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());
}
在多线程环境中,您应该考虑在 foreach
循环中使用 Parallel.ForEach
与上面类似的设置:
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());
});