在 WinForms 应用程序中读取网络路径中的所有文本文件
Reading all text files in a network path in a WinForms app
如何在 C# 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]
我也想忽略文本文件的 "some text" 部分,继续在 [data start] 行读取文本文件并在 [data end] 行结束,然后最后执行查询数据库,然后将从文本文件接收到的数据插入到 table.
来自 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);
}
}
}
浏览每个文件并阅读 "DATA" 信息。如果您将其设为单独的函数,请确保为 '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);
}
我建议创建一个关于如何进行查询和更新数据库的新线程。您没有提及它是什么数据库,table 结构或其他。
注意安全,
-罗布
类似下面的内容将读取指定网络目录中的所有 .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
}
}
这是我知道的获取所有数据项的最简单方法:
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();
我得到这样的结果:
然后您可以将字符串数组保存到数据库中。
如何在 C# 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]
我也想忽略文本文件的 "some text" 部分,继续在 [data start] 行读取文本文件并在 [data end] 行结束,然后最后执行查询数据库,然后将从文本文件接收到的数据插入到 table.
来自 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);
}
}
}
浏览每个文件并阅读 "DATA" 信息。如果您将其设为单独的函数,请确保为 '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);
}
我建议创建一个关于如何进行查询和更新数据库的新线程。您没有提及它是什么数据库,table 结构或其他。
注意安全,
-罗布
类似下面的内容将读取指定网络目录中的所有 .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
}
}
这是我知道的获取所有数据项的最简单方法:
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();
我得到这样的结果:
然后您可以将字符串数组保存到数据库中。