foreach файл в папке, переименовать и сохранить - PullRequest
2 голосов
/ 18 октября 2011

У меня есть простой foreach здесь, где я нашел папку с помощью инструмента folderBrowserDialog и теперь пытаюсь просмотреть каждый из файлов и заменить определенные символы в имени файла.

Я получаю сообщение об ошибке, в котором говорится, что не удается найти файл, когда он попадает в эту часть кода File.Move(_FileName, _NewFileName);

Может кто-нибудь пролить свет на это?Буду очень признателен.

Спасибо

foreach (FileInfo Files in Folder.GetFiles())
            {
                _FileName = Files.Name;

                _NewFileName = _FileName.Replace(" ", "-").Replace(",", "-");

                File.Move(_FileName, _NewFileName);

                File.Delete(_FileName);

            }

Ответы [ 2 ]

12 голосов
/ 18 октября 2011

Вам необходимо использовать Files.FullName, а не Files.Name

FullName, включая полный путь (т. Е. C:\test\foo.txt), необходимый для File.Move() и File.Delete()в то время как Name - это просто имя файла (т. е. foo.txt).

Edit:

@ crashmstr правильно, вы не должны делать замену строки вполный путь.В общем, я бы, вероятно, сделал это следующим образом:

foreach (FileInfo file in Folder.GetFiles())
{
    string originalFileName = file.FullName;
    string fileName = file.Name.Replace(" ", "-").Replace(",", "-");
    string newFileName = Path.Combine(file.DirectoryName, fileName);

    File.Move(originalFileName, newFileName);
}

Также имейте в виду, что File.Delete() здесь не нужен, так как оригинальный файл больше не будет там после того, как вы его переместите.

0 голосов
/ 18 октября 2011

Вы пытаетесь удалить элемент из коллекции, которую вы повторяете.

Вы можете сохранить список файлов, которые вы получаете из Folder.GetFiles (), в некоторую переменную и выполнять итерацию по ней с помощью foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...