为什么我的if语句没有停止

本文关键字:语句 我的 if 为什么 | 更新日期: 2023-09-27 17:57:44

我还是C#的新手,一直在这个问题上。

我正在尝试读取文件并获取文件扩展名,如果文件名末尾没有".done",请继续。然后在剩下的代码中,我将数据上传到数据库,并将文件名更改为".done"。

问题是我查看文件的If语句返回true,并再次上传所有文件,而不仅仅是需要上传的文件。我尝试了很多方法,但似乎都不起作用。

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.*", System.IO.SearchOption.TopDirectoryOnly);
            foreach (FileInfo fileInfo in fileEntries)
            {
                if (fileInfo.Extension != ".done")
                    continue;
                // More code
             }

我也尝试过获取所有文件。它仍然循环并再次上传所有文件,即使是那些已经完成.的文件

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles();
            foreach (FileInfo fileInfo in fileEntries)
            {
                if (fileInfo.Name != ".done")
                    continue;
                // More code
             }

这段代码有效,但我需要更改它,因为文件扩展名会更改。

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.ivc", System.IO.SearchOption.TopDirectoryOnly);
            foreach (FileInfo fileInfo in fileEntries)
            {
                if (fileInfo.Name == ".ivc")
                    continue;
                // More code
             }

任何事情都会有帮助。

感谢

为什么我的if语句没有停止

您的布尔条件不是向后的吗?如果扩展没有完成,你想完成剩下的代码,如果完成了,你想进入循环的下一次迭代,对吧?continue关键字将在扩展未完成时带您进行下一次迭代!

foreach (FileInfo fileInfo in fileEntries)
{
    if (fileInfo.Name == ".done")
        continue;
    // More code
}

为什么不只要求具有您要查找的扩展名的文件?

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.done", System.IO.SearchOption.TopDirectoryOnly);
foreach (FileInfo fileInfo in fileEntries)
{
    // do stuff
}

我建议尽可能使用积极思维的"最佳编码"实践(这一建议也可以应用于生活),因为它们通常更容易阅读。与其使用"不相等"条件,不如使用"等于"条件,如下所示:

        // just for this example
        var folder = Environment.CurrentDirectory;
        var dirInfo = new DirectoryInfo(folder);
        // type of files to retrieve
        // @ is for 'string literal' (see link below)
        var extension = @".ivc";  
        // this translates to: "*.ivc"
        var allFiles = @"*" + extension;
        // the extension of files already processed, and hence, skipped
        var skipExtension = @".done";
        var fileEntries = dirInfo.GetFiles(allFiles, System.IO.SearchOption.TopDirectoryOnly);
        // track number of files processed
        var filesProcessed = 0;
        foreach (var fileInfo in fileEntries)
        {
            // skip files that have already been processed
            if (fileInfo.Extension == skipExtension)
            {
                continue;
            }
            // process new files found in this directory
            filesProcessed++;
        }

参考文献:字符串文字