Unity顺序读取一个文件下的所有文本文档里面的数据,将所有的文本文档里面的数据汇总输入到自己指定的文本文档下,每次执行该代码,将读取的文本文档名称与之前读取的文本文档名称进行对比,再次写入时,删除指定的文本文档里面以前读取的数据,只写入与上一次文本文档名称不同的文本文档里面的数据。
时间: 2023-07-15 11:15:22 浏览: 100
可以使用C#中的System.IO和System.Linq命名空间来实现此功能。下面是一个示例代码:
```csharp
using System.IO;
using System.Linq;
public class FileReader
{
private string outputFilePath; // 汇总数据输出文件路径
private string lastReadFileName; // 上次读取的文件名
public FileReader(string outputFilePath)
{
this.outputFilePath = outputFilePath;
lastReadFileName = ""; // 初始化上次读取的文件名为空
}
public void ReadFiles(string folderPath)
{
// 获取目录下的所有文本文件
var files = Directory.GetFiles(folderPath, "*.txt");
// 如果没有文本文件,则直接返回
if (files.Length == 0)
{
return;
}
// 根据文件名排序
files = files.OrderBy(f => f).ToArray();
// 获取上次读取的文件在数组中的下标
int lastIndex = Array.IndexOf(files, folderPath + "\\" + lastReadFileName);
// 如果没有找到上次读取的文件,则从头开始读取
if (lastIndex == -1)
{
lastIndex = 0;
}
// 读取每个文本文件里面的内容
string allText = "";
for (int i = lastIndex; i < files.Length; i++)
{
string fileName = Path.GetFileName(files[i]);
// 如果这个文件已经读取过,则跳过
if (fileName == lastReadFileName)
{
continue;
}
// 读取文件内容
string fileText = File.ReadAllText(files[i]);
// 追加到汇总数据中
allText += fileText + "\n";
// 更新上次读取的文件名
lastReadFileName = fileName;
}
// 如果没有新的数据,则直接返回
if (allText == "")
{
return;
}
// 删除指定的文本文档里面以前读取的数据
if (File.Exists(outputFilePath))
{
string outputText = File.ReadAllText(outputFilePath);
int index = outputText.IndexOf(lastReadFileName);
if (index != -1)
{
outputText = outputText.Substring(0, index);
File.WriteAllText(outputFilePath, outputText);
}
}
// 将汇总数据写入指定的文本文档下
File.AppendAllText(outputFilePath, allText);
}
}
```
使用示例:
```csharp
FileReader reader = new FileReader("output.txt");
reader.ReadFiles("C:\\TestFolder\\TextFiles");
```
其中,output.txt是汇总数据输出文件的路径,C:\TestFolder\TextFiles是要读取的文本文件所在的文件夹路径。每次执行ReadFiles方法时,将会读取所有的文本文件,将它们的数据汇总输入到output.txt文件中。如果上次读取的文件名与这次读取的文件名不同,则会删除output.txt文件中所有上次读取的文件后面的数据。
阅读全文