首页 > 解决方案 > if else 语句中 file.exist 语句的 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;
}

标签: c#

解决方案


我认为你应该使用FileSystemWatcher来完成你的任务。将Filter设置为您的文件名并订阅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 文件夹中创建一个文件。该程序将发送有关创建文件的消息并将它们复制到“更新”文件夹中。


推荐阅读