在我的应用程序中有这样的情况。在创建文件之前,我的应用程序在特定文件名下的目录中搜索文件。如果找到任何文件/文件,则它应该读取每个文件内容并将这些内容(每个文件)写入新文件。我用谷歌搜索了许多人并尝试过这样的事情:
string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH");
string[] files = Directory.GetFiles(path,temp_file_format);
foreach (FileAccess finfo in files)
{
string text = File.ReadAllText(finfo);
}
和
System.IO.DirectoryInfo dir = new DirectoryInfo(path);
System.IO.FileInfo[] files = dir.GetFiles(temp_file_format);
foreach (FileInfo finfo in files)
{
finfo.OpenRead();
}
但所有这些都失败了。任何人都可以向我展示替代方案吗?
我的temp_file_format字符串有什么问题吗?
如果我可以将这些内容添加到新文件中,那将是很好的。还有,不用担心......
任何帮助都会非常感激..
答案 0 :(得分:2)
这是一个竞争性的工作实现,可以完成所有这些
using System.IO;
using System.Linq;
public static class Program {
public static void Main()
{
var all = Directory.GetFiles("/tmp", "*.cpp")
.SelectMany(File.ReadAllLines);
using (var w = new StreamWriter("/tmp/output.txt"))
foreach(var line in all)
w.WriteLine(line);
}
}
我在单声道2.10上进行了测试,它应该适用于任何.NET 4.0+(对于File.ReadAllLines
这是 lazy 行可枚举)
答案 1 :(得分:1)
这是一个简短的代码段,可以读取所有文件并将其放入路径outputPath
var lines = from file in Directory.GetFiles(path,temp_file_format)
from line in File.ReadAllLines(file)
select line;
File.WriteAllLines(outputPath, content);
您使用代码时遇到的问题与读取文件无关,而只是尝试将对象用作类型而不是。 Directory.GetFiles
返回string
和File.ReadXXX
的数组,File.OpenRead
期望路径为字符串。因此,您只需将作为path参数返回的每个字符串传递给适当的方法。以上是一个这样的例子。希望它有助于解决您的问题并解释代码的实际问题
答案 2 :(得分:0)
试试这个:
foreach (FileInfo finfo in files)
{
try
{
using (StreamReader sr = new StreamReader("finfo "))
{
String line = sr.ReadToEnd();
Console.WriteLine(line);
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
答案 3 :(得分:0)
using (var output = File.Create(outputPath))
{
foreach (var file in Directory.GetFiles(InputPath,temp_file_format))
{
using (var input = File.OpenRead(file))
{
input.CopyTo(output);
}
}
}