c#通过定时器实时抓取一个文件夹下是否有新生成的txt文件,如果有新生成的txt文件,判断新生成文件是不是可编辑文件,如果是,只给新生成的txt文件内容头部添加信息,然后将修改完的txt文件转为csv格式,保存到另一个文件夹中,将生成文件和转换过程显示在控制台上
时间: 2024-05-10 20:17:22 浏览: 7
你可以使用C#的FileSystemWatcher类来监控文件夹的变化,使用定时器来定时检查是否有新的文件生成。以下是一个示例代码:
```csharp
using System;
using System.IO;
using System.Timers;
namespace FileWatcherExample
{
class Program
{
static void Main(string[] args)
{
// 设置监控的文件夹路径
string folderPath = @"C:\temp\";
// 创建 FileSystemWatcher 实例
FileSystemWatcher watcher = new FileSystemWatcher(folderPath);
// 监控文件的创建事件
watcher.Created += new FileSystemEventHandler(OnFileCreated);
// 开始监控
watcher.EnableRaisingEvents = true;
// 创建定时器,每隔10秒检查是否有新文件生成
Timer timer = new Timer();
timer.Interval = 10000; // 10秒
timer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);
timer.Start();
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
private static void OnFileCreated(object sender, FileSystemEventArgs e)
{
// 判断文件类型是否为txt
if (Path.GetExtension(e.FullPath).ToLower() != ".txt")
{
return;
}
Console.WriteLine($"发现新文件: {e.FullPath}");
// 判断文件是否为只读文件
if (File.GetAttributes(e.FullPath).HasFlag(FileAttributes.ReadOnly))
{
Console.WriteLine($"文件 {e.Name} 是只读文件,无法编辑。");
return;
}
// 添加文件头部信息
string content = $"这是文件 {e.Name} 的头部信息。{Environment.NewLine}";
content += File.ReadAllText(e.FullPath);
// 写入修改后的内容
File.WriteAllText(e.FullPath, content);
Console.WriteLine($"文件 {e.Name} 已修改。");
// 转换为csv
string csvPath = Path.Combine(Path.GetDirectoryName(e.FullPath), Path.GetFileNameWithoutExtension(e.FullPath) + ".csv");
File.WriteAllText(csvPath, "这是csv格式的文件。");
Console.WriteLine($"文件 {Path.GetFileName(csvPath)} 已保存到 {Path.GetDirectoryName(csvPath)}。");
}
private static void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("定时器检查...");
}
}
}
```
上面的示例代码可以监控指定文件夹中是否有新的txt文件生成,如果有新的文件生成,会判断文件是否为只读文件,如果不是只读文件,则会在文件头部添加信息,并将修改后的文件转换为csv格式保存到另一个文件夹中,同时将生成文件和转换过程显示在控制台上。定时器每隔10秒检查一次是否有新的文件生成。