if else语句中file.exist语句的C#问题

时间:2019-09-20 07:26:25

标签: c#

我当前正在做一个学校项目,该程序使用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;
}

1 个答案:

答案 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文件夹中创建一个文件。该程序将发送一条有关创建文件的消息,并将文件复制到“已更新”文件夹中。