读取WinForms应用程序中网络路径中的所有文本文件
如何读取C#Winforms中的网络路径中的所有文本文件?文本文件名称一直在变化。读取WinForms应用程序中网络路径中的所有文本文件
例如:
- ABC-GD09538.txt
- ADB-JK3949.txt
- GJD-KGL9495-TXT
每个文本的格式文件打开时是:
Some Text
Some Text
Some Text
Some Text
[data start]
"Data1"|"Data2"|"Data3"|"Data4"|"Data5"|"Data5"|"Data6"
[data end]
我也想忽略文本文件的“部分文本”部分,并在行[data start]上继续读取文本文件,并在行[data end]结束,最后对数据库执行查询然后将从文本文件接收的数据插入到表中。
从MSDN网站:https://msdn.microsoft.com/en-us/library/dd997370%28v=vs.110%29.aspx
这将通过C枚举:\目录并为您提供每个.txt文件的列表(我拿出Where子句)。
using System;
using System.IO;
using System.Linq;
class Program
{
static void Main(string[] args)
{
try
{
var files = from file in Directory.EnumerateFiles(@"c:\", "*.txt", SearchOption.AllDirectories)
from line in File.ReadLines(file)
select new
{
File = file,
Line = line
};
foreach (var f in files)
{
Console.WriteLine("{0}\t{1}", f.File, f.Line);
}
Console.WriteLine("{0} files found.", files.Count().ToString());
}
catch (UnauthorizedAccessException UAEx)
{
Console.WriteLine(UAEx.Message);
}
catch (PathTooLongException PathEx)
{
Console.WriteLine(PathEx.Message);
}
}
}
要遍历每个文件并阅读“数据”信息。如果您将此功能设为独立功能,请务必传递'f'参数。
try
{
foreach (var f in files)
{
using (StreamReader sr = new StreamReader(f.file))
{
string readLine;
do
{
readLine = sr.ReadLine();
string[] readLineSplit = readLine.Split('|');
if (readLineSplit.Length > 1)
{
//Make call to database for query and update it with the readSplit.
}
} while (!sr.EndOfStream);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
我会建议创建一个新的线程上如何进行查询和更新数据库。你没有提及它是什么数据库,表结构或其他。
是安全的,
-Rob
谢谢!@Robert Davidson – 2015-04-01 03:27:39
即时通讯使用mysql数据库 – 2015-04-01 03:36:18
我得到的错误:名称'readSplit'在当前上下文中不存在 – 2015-04-01 03:51:59
类似下面将读取指定的网络目录中的所有文件.txt
和跳过所有行,直到它到达文本文件[data start]
。
using System.IO;
using System.Linq;
string networkPath = "\\\\Network\\Path";
foreach (string path in Directory.GetFiles(networkPath, "*.txt"))
{
foreach (string line in File.ReadAllLines(path).SkipWhile(x => !x.Contains("[data start]")))
{
//Do something with line here
}
}
感谢你。 – 2015-04-01 03:27:15
如何显示gridview上的所有文本数据? – 2015-04-01 03:36:11
@KevinRodriguez - 如果您需要在网格视图中显示此信息,请提出一个新问题。你不应该对目前的问题提出新的问题 - 你最终会讨厌每个人。 – Enigmativity 2015-04-01 04:11:28
这是我知道让所有的数据项进行最简单的方法:
string[] data =
Directory
.EnumerateFiles(@"Path\To\Folder", "*.txt")
.SelectMany(f =>
File
.ReadAllLines(f)
.SkipWhile(l => l != "[data start]")
.Skip(1)
.TakeWhile(l => l != "[data end]")
.SelectMany(l => l.Split('|')))
.ToArray();
我得到这种结果:
然后,你可以保存数据库的字符串数组。
到目前为止你得到了哪些代码? – 2015-04-01 02:54:29
目前没有,我只需要一个想法,所以我可以在它上面工作。我不熟悉这种情况。 – 2015-04-01 02:56:18
参见例如'Directory.GetFiles()'和'StreamReader'。更重要的是,你的问题太广泛了。尝试一下。 _Anything_。展示[一个很好的,_minimal_,_complete_代码示例](http://stackoverflow.com/help/mcve),解释代码的作用以及与你想要的不同之处。 – 2015-04-01 03:06:53