Wie kann ich eine Datei mit C# umbenennen?
Wenn Sie einen using-Block verwenden, können Sie thread.sleep entfernen und das Programm automatisch den Fokus aufheben lassen, richtig?
Wie kann ich eine Datei mit C# umbenennen?
// Source file to be renamed
string sourceFile = @"C:\Temp\MaheshChand.jpg";
// Create a FileInfo
System.IO.FileInfo fi = new System.IO.FileInfo(sourceFile);
// Check if file is there
if (fi.Exists)
{
// Move file with a new name. Hence renamed.
fi.MoveTo(@"C:\Temp\Mahesh.jpg");
Console.WriteLine("File Renamed.");
}
public static class ImageRename
{
public static void ApplyChanges(string fileUrl,
string temporaryImageName,
string permanentImageName)
{
var currentFileName = Path.Combine(fileUrl,
temporaryImageName);
if (!File.Exists(currentFileName))
throw new FileNotFoundException();
var extention = Path.GetExtension(temporaryImageName);
var newFileName = Path.Combine(fileUrl,
$"{permanentImageName}
{extention}");
if (File.Exists(newFileName))
File.Delete(newFileName);
File.Move(currentFileName, newFileName);
}
}
Ich bin auf einen Fall gestoßen, in dem ich die Datei innerhalb des Event-Handlers umbenennen musste, der bei jeder Datei-Änderung, einschließlich Umbenennung, ausgelöst wurde, und um das ewige Umbenennen der Datei zu überspringen, musste ich sie umbenennen, mit:
Entfernen des Originals
File.Copy(fileFullPath, destFileName); // Both have the format of "D:....\myFile.ext" Thread.Sleep(100); // Wait for the OS to unfocus the file File.Delete(fileFullPath);
Wenn Sie einen using-Block verwenden, können Sie thread.sleep entfernen und das Programm automatisch den Fokus aufheben lassen, richtig?
@Zoba, wenn Sie meinten, sich zu bewerben using
überlagern File.Copy
o File.Delete
statischen Methoden, dann sollten Sie wissen, dass dies nicht möglich ist, da beide Methoden void
. Zur Verwendung using
Anweisung sollte der Rückgabetyp der Methode (einschließlich Konstruktor) das Objekt sein, dessen Typ die IDisposable
Schnittstelle.
private static void Rename_File(string FileFullPath, string NewName) // nes name without directory actualy you can simply rename with fileinfo.MoveTo(Fullpathwithnameandextension);
{
FileInfo fileInfo = new FileInfo(FileFullPath);
string DirectoryRoot = Directory.GetParent(FileFullPath).FullName;
string filecreator = FileFullPath.Substring(DirectoryRoot.Length,FileFullPath.Length-DirectoryRoot.Length);
filecreator = DirectoryRoot + NewName;
try
{
fileInfo.MoveTo(filecreator);
}
catch(Exception ex)
{
Console.WriteLine(filecreator);
Console.WriteLine(ex.Message);
Console.ReadKey();
}
enter code here
// string FileDirectory = Directory.GetDirectoryRoot()
}
Wenn C# eine Funktion nicht hat, verwende ich C++ oder C:
public partial class Program
{
[DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
public static extern int rename(
[MarshalAs(UnmanagedType.LPStr)]
string oldpath,
[MarshalAs(UnmanagedType.LPStr)]
string newpath);
static void FileRename()
{
while (true)
{
Console.Clear();
Console.Write("Enter a folder name: ");
string dir = Console.ReadLine().Trim('\\') + "\\";
if (string.IsNullOrWhiteSpace(dir))
break;
if (!Directory.Exists(dir))
{
Console.WriteLine("{0} does not exist", dir);
continue;
}
string[] files = Directory.GetFiles(dir, "*.mp3");
for (int i = 0; i < files.Length; i++)
{
string oldName = Path.GetFileName(files[i]);
int pos = oldName.IndexOfAny(new char[] { '0', '1', '2' });
if (pos == 0)
continue;
string newName = oldName.Substring(pos);
int res = rename(files[i], dir + newName);
}
}
Console.WriteLine("\n\t\tPress any key to go to main menu\n");
Console.ReadKey(true);
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Ich würde ungern hinzufügen, dass es ein Problem hier alle Lösungen hier vor allem, wenn Sie tun, vergleicht und verschieben die Datei von einem Speicherort zu einem anderen (Verzeichnis sowie Dateiname) insofern, als Sie sollten sich bewusst sein, dass ein Datenträger ein Knotenpunkt sein könnte... also wenn newname ist q: \SomeJunctionDirectory\hello.txt und der alte Name ist c: \TargetOfJunctionPoint\hello.txt... Die Dateien sind identisch, aber die Namen sind es nicht.