Почему мое заявление if не останавливается? - PullRequest
0 голосов
/ 26 мая 2011

Я все еще новичок в 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
             }

Этот код работает, но мне нужно изменить его, потому что расширения файлов меняются.1015 * Все поможет.

Спасибо

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Разве у вас нет логического условия назад? Вы хотите сделать остальную часть своего кода, если расширение НЕ .done, и перейти к следующей итерации цикла, если оно НЕ .done, верно? Ключевое слово continue ведет вас к следующей итерации, когда расширение не .done!

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

    // More code
}
0 голосов
/ 26 мая 2011

Почему бы не запросить только те файлы, которые имеют расширение, которое вы ищете?

DirectoryInfo DirInfo = new DirectoryInfo(sFolder);

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

foreach (FileInfo fileInfo in fileEntries)
{
    // do stuff
}
0 голосов
/ 26 мая 2011

Я предлагаю использовать «наилучшее кодирование», когда это возможно, используя позитивное мышление (этот совет также может быть применен к жизни), потому что их, как правило, легче читать.Вместо использования условия «не равно» используйте условие «равно», например:

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

Ссылки: Строковые литералы

...