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

时间:2011-05-25 21:52:14

标签: c# if-statement file-extension

我还是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
             }

我也通过获取所有文件来尝试这个。它仍然会循环并上传所有文件,即使是那些有'.done'的文件。

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
             }

一切都会有所帮助。

由于

3 个答案:

答案 0 :(得分:1)

你有没有你的布尔条件向后?如果扩展名不是.done,你想要完成其余的代码,如果IT是.done,则转到循环的下一次迭代,对吗?当扩展名不是.done!

时,continue关键字将带您进入下一次迭代
foreach (FileInfo fileInfo in fileEntries)
{
    if (fileInfo.Name == ".done")
        continue;

    // More code
}

答案 1 :(得分:0)

我建议尽可能使用积极思考的“最佳编码”做法(这种建议也适用于生活),因为它们通常更容易阅读。而不是使用“不相等”条件,使用“等于”条件,如下所示:

        // 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++;
        }

参考文献: String literals

答案 2 :(得分:0)

为什么不要求只拥有您正在寻找的扩展名的文件?

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);

FileInfo[] fileEntries = DirInfo.GetFiles("*.done", System.IO.SearchOption.TopDirectoryOnly);

foreach (FileInfo fileInfo in fileEntries)
{
    // do stuff
}