Datei oder Ordner umbenennen", um die Kleinschreibung In C# mit DirectoryInfo - /FileInfo.MoveTo()
Ich habe ein Programm, benennt Dateien oder Ordner in Kleinbuchstaben, Namen.
Schreibe ich diesen code:
private void Replace(string FolderLocation, string lastText, string NewText)
{
if (lastText == "")
{
lastText = " ";
}
if (NewText == "")
{
NewText = " ";
}
DirectoryInfo i = new DirectoryInfo(FolderLocation);
string NewName = "";
if (checkBox2.Checked)
{
if (i.Parent.FullName[i.Parent.FullName.Length - 1].ToString() != "\\") //For parents like E:/
{
NewName = i.Parent.FullName + "\\" + i.Name.Replace(lastText, NewText);
}
else
{
NewName = i.Parent.FullName + i.Name.Replace(lastText, NewText);
}
NewName = NewName.ToLower();
if (NewName != i.FullName)
{
i.MoveTo(NewName);
}
foreach (DirectoryInfo sd in i.GetDirectories())
{
Replace(sd.FullName, lastText, NewText);
}
}
if (checkBox1.Checked)
{
foreach (FileInfo fi in i.GetFiles())
{
NewName = fi.Directory + "\\" + fi.Name.Replace(lastText, NewText);
NewName = NewName.ToLower();
if (NewName != fi.FullName)
{
fi.MoveTo(NewName);
}
}
}
}
aber ich bekomme eine exception:
"Quell-und Zielpfad müssen Verschieden sein."
wie kann ich lösen dieses problem?
- Windows ist groß-und Kleinschreibung, soweit Dateinamen betroffen sind.
- ok.wie ist es aber, Dateinamen anzeigen?
- Es verwendet, was gespeichert wird. Aber beim Vergleich von Dateinamen -
"FILENAME" == "filename" == "FileName"
, soweit es ihn betrifft. - Ich denke, es ist nicht erlaubt unter Windows OS eine bestimmte Datei zB "test.txt" und "Test.txt" im gleichen Ordner. Das ist, warum Ihr geht eine Ausnahme. MoveTo kopiert die Datei an eine neue position und löscht die alte. Versuchen Dateisystem.Benennen Sie stattdessen (msdn.microsoft.com/en-gb/library/...)
- obwohl im standard-Fall Sie richtig sind Windows - /NTFS-tatsächlich kann so konfiguriert werden, erlauben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit Windows ist groß-und Kleinschreibung, soweit Dateinamen betroffen sind, müssen Sie benennen Sie die Datei in einen temporären Namen benennen Sie dann wieder mit Kleinbuchstaben.
Zwar die Windows-Dateisysteme speichern die Namen case-senstivie Sie Verhalten sich groß-und Kleinschreibung der Namen Vergleich damit Ihre Umbenennung Betrieb funktioniert nicht...
WENN Sie wirklich brauchen/wollen, das zu tun, müssen Sie Sie zuerst umbenennen temporär die Datei/Verzeichnis, um etwas anders und einzigartig, dann benennen Sie es "zurück" zu den "lower falls der name" die Sie wollen.
Referenz siehe http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx und http://support.microsoft.com/kb/100108/en-us .
WENN Sie brauchen, NTFS, um die groß-und Kleinschreibung können Sie den dword -
ObCaseInsensitive
unterHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\
auf 0 (NICHT EMPFOHLEN!).WENN Sie sind den Umgang mit NFS dann sehen http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx .
Leider ist dies ein windows-Problem, wie es mit groß-und Kleinschreibung, wie Oded erwähnt in den Kommentaren. Was Sie würden tun müssen, ist, benennen Sie die Ordner doppelt. Durch verschieben des Ordners, um einen neuen temporären Namen dann wieder zu den Kleinbuchstaben der ursprüngliche name.