我当前正在做一个学校项目,该程序使用filesystemwatcher监视文件并在检测到文件时将其复制到其他文件夹。但是,只要有文件更新,就会将其另存为_update.txt并附加到我创建的copy()函数后面。
问题在于,即使它是文件的第一个实例,程序有时也会将其重命名为更新。复制功能工作正常。非常感谢,因为我是编程新手!
代码如下:
try
{
String dest = "inputTextBox.text" + "\\";
String fileName = e.Name;
if (!File.Exist(dest + fileName))
{
try
{
copy("");
}
catch(Exception e)
{
return;
}
}
else if (File.Exist(dest + fileName))
{
try
{
copy("update.txt");
}
catch(Exception e)
{
return;
}
}
}
catch (Exception e)
{
return;
}
答案 0 :(得分:2)
我认为您应该使用FileSystemWatcher来完成任务。将过滤器设置为文件名,并预订 Created 事件。
例如:
static void Main(string[] args)
{
var watcher = new FileSystemWatcher //
{
Path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), //Set watching to MyDocuments folder
InternalBufferSize = 32 * 1024, // set 32KB buffer size (it's a maximal size)
Filter = "*", //Set filter to all file types
NotifyFilter = NotifyFilters.FileName, //We need this notify type for watch creating files
EnableRaisingEvents = true //Begin watcing
};
watcher.Created += (s, e) => //subscribe lambda to "created" event
{
Console.WriteLine($"{e.FullPath} created");
Task.Delay(1000).Wait();
try
{
File.Copy(e.FullPath, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "updated", $"{e.Name}-{Guid.NewGuid()}"));
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
};
Console.ReadLine(); //waiting
}
我在控制台应用程序中测试了此代码。当应用程序运行时,请尝试在MyDocuments文件夹中创建一个文件。该程序将发送一条有关创建文件的消息,并将文件复制到“已更新”文件夹中。