Я пытаюсь понять, что здесь происходит. У меня есть процедура, которая просматривает все каталоги в каталоге и удаляет любые нечисловые значения из первой части имени каталога. По какой-то причине, когда он выполняет MoveTo, я получаю сообщение «Исходный и конечный пути должны иметь одинаковые корни. Перемещение не будет работать между томами». Но я указываю только новое имя в качестве параметра. Таким образом, каталог может быть «007A Raby», а новое имя, переданное в MoveTo, будет «007 Raby». У кого-нибудь есть мысли, что я делаю не так?
private void RenameSubs(string directory)
{
try
{
if (Directory.Exists(directory))
{
var parentDI = new DirectoryInfo(directory);
foreach (var di in parentDI.GetDirectories())
{
var spaceLocation = di.Name.IndexOf(' ');
var changed = false;
if (spaceLocation > 0)
{
var oldName = di.Name;
var subPartA = di.Name.Substring(0, spaceLocation);
var subPartB = di.Name.Substring(spaceLocation, di.Name.Length - spaceLocation);
for (int i = subPartA.Length - 1; i > 0; i--)
{
if (subPartA[i] < '0' || subPartA[i] > '9')
{
subPartA = subPartA.Substring(0, i);
changed = true;
}
else
{
break;
}
}
if (changed)
{
if (!Directory.Exists(Path.Combine(directory, subPartA + subPartB)))
{
var newName = subPartA + subPartB;
di.MoveTo(newName);
txtOutput.Text += "Renamed " + oldName + " to " + di.Name + "\r\n";
}
else
{
txtOutput.Text += "Error " + oldName + " already exists " + "\r\n";
}
}
else
{
txtOutput.Text += "Ignored " + di.Name + "\r\n";
}
}
}
}
}
catch (System.Exception excpt)
{
txtOutput.Text += "Error " + excpt.Message + "\r\n";
Console.WriteLine(excpt.Message);
}
}
newName
. Бьюсь об заклад, это не то, что вы ожидали. Также в более общем примечании: используйте классSystem.IO.Path
для управления именами каталогов и файлов (вместо прямых операций со строками); и, ради всего святого, не сравнивайте логические выражения с литералами... Я имею в виду, что это законно и работает, но менее читабельно, чем просто писатьif (!Directory.Exists(...))
- person Peter Duniho   schedule 25.10.2014