Tengo la tarea de cambiar los nombres de algunos archivos (es decir, agregar el id a cada nombre dinámicamente) en una carpeta usando C#.Cambiar el nombre de algunos archivos en una carpeta
Ejemplo: help.txt a 1help.txt
¿Cómo puedo hacer esto?
Tengo la tarea de cambiar los nombres de algunos archivos (es decir, agregar el id a cada nombre dinámicamente) en una carpeta usando C#.Cambiar el nombre de algunos archivos en una carpeta
Ejemplo: help.txt a 1help.txt
¿Cómo puedo hacer esto?
Echa un vistazo a FileInfo.
hacer algo como esto:
void RenameThem()
{
DirectoryInfo d = new DirectoryInfo("c:/dir/");
FileInfo[] infos = d.GetFiles("*.myfiles");
foreach(FileInfo f in infos)
{
// Do the renaming here
File.Move(f.FullName, Path.Combine(f.DirectoryName, "1" + f.Name));
}
}
La función que está buscando es File.Move(source, destination)
del System.IO
espacio de nombres. También eche un vistazo a la clase DirectoryInfo
(del mismo espacio de nombres) para acceder al contenido de la carpeta.
Echa un vistazo How can I rename a file in C#?. No sabía que C# no tiene un cambio de nombre ... Parece que tiene que usar System.IO.File.Move(oldFileName, newFileName)
Voy a volcar esto aquí ya que tenía que escribir este código para mis propios fines.
using System;
using System.IO;
public static class FileSystemInfoExtensions
{
public static void Rename(this FileSystemInfo item, string newName)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
FileInfo fileInfo = item as FileInfo;
if (fileInfo != null)
{
fileInfo.Rename(newName);
return;
}
DirectoryInfo directoryInfo = item as DirectoryInfo;
if (directoryInfo != null)
{
directoryInfo.Rename(newName);
return;
}
throw new ArgumentException("Item", "Unexpected subclass of FileSystemInfo " + item.GetType());
}
public static void Rename(this FileInfo file, string newName)
{
// Validate arguments.
if (file == null)
{
throw new ArgumentNullException("file");
}
else if (newName == null)
{
throw new ArgumentNullException("newName");
}
else if (newName.Length == 0)
{
throw new ArgumentException("The name is empty.", "newName");
}
else if (newName.IndexOf(Path.DirectorySeparatorChar) >= 0
|| newName.IndexOf(Path.AltDirectorySeparatorChar) >= 0)
{
throw new ArgumentException("The name contains path separators. The file would be moved.", "newName");
}
// Rename file.
string newPath = Path.Combine(file.DirectoryName, newName);
file.MoveTo(newPath);
}
public static void Rename(this DirectoryInfo directory, string newName)
{
// Validate arguments.
if (directory == null)
{
throw new ArgumentNullException("directory");
}
else if (newName == null)
{
throw new ArgumentNullException("newName");
}
else if (newName.Length == 0)
{
throw new ArgumentException("The name is empty.", "newName");
}
else if (newName.IndexOf(Path.DirectorySeparatorChar) >= 0
|| newName.IndexOf(Path.AltDirectorySeparatorChar) >= 0)
{
throw new ArgumentException("The name contains path separators. The directory would be moved.", "newName");
}
// Rename directory.
string newPath = Path.Combine(directory.Parent.FullName, newName);
directory.MoveTo(newPath);
}
}
Usted puede utilizar File.Move, así:
string oldFilePath = Path.Combine(Server.MapPath("~/uploads"), "oldFileName");
string newFilePath = Path.Combine(Server.MapPath("~/uploads"), "newFileName");
File.Move(oldFilePath, newFilePath);
En .NET Framework 4.0 utilizo FileInfo.MoveTo()
método que sólo toma 1 argumento
sólo para mover los archivos de mi método es el siguiente
private void Move(string sourceDirName, string destDirName)
{
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
FileInfo[] files = null;
files = dir.GetFiles();
foreach (FileInfo file in files)
{
string temppath = Path.Combine(destDirName, file.Name);
file.MoveTo(temppath);
}
}
para cambiar el nombre de los archivos de mi método se ve así
private void Rename(string folderPath)
{
int fileCount = 0;
DirectoryInfo dir = new DirectoryInfo(folderPath);
files = dir.GetFiles();
foreach (FileInfo file in files)
{
fileCount += 1;
string newFileName = fileCount.ToString() + file.Name;
string temppath = Path.Combine(folderPath, newFileName);
file.MoveTo(temppath);
}
}
como se puede ver cambiar el nombre de la sintaxis del archivo que es casi lo mismo que para moverlo, sólo tiene que modificar el filename
antes de usar MoveTo()
método.
use Path.Combine (f.Directory.ToString(), "1" + f.Name) en lugar de "1" + f.FullName –