重命名文件夹中的某些文件

时间:2021-09-19 00:53:15

I have a task of changing the names of some files (that is, adding id to each name dynamically) in a folder using C#.

我有一个任务是使用C#更改某些文件的名称(即,动态地为每个名称添加id)。

Example: help.txt to 1help.txt

示例:help.txt到1help.txt

How can I do this?

我怎样才能做到这一点?

6 个解决方案

#1


82  

Have a look at FileInfo.

看看FileInfo。

Do something like this:

做这样的事情:

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));
    }
}

#2


8  

I'll just dump this here since I needed to write this code for my own purposes.

我只是将其转储到此处,因为我需要为自己的目的编写此代码。

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);
    }
}

#3


8  

The function that you are looking for is File.Move(source, destination) of the System.IO namespace. Also take a look at the DirectoryInfo class (of the same namespace) to access the contents of the folder.

您正在寻找的功能是System.IO命名空间的File.Move(源,目标)。另请查看DirectoryInfo类(具有​​相同名称空间)以访问该文件夹的内容。

#4


1  

Check out How can I rename a file in C#?. I didn't know that C# doesn't have a rename... It seems you have to use System.IO.File.Move(oldFileName, newFileName)

查看如何在C#中重命名文件?我不知道C#没有重命名...似乎你必须使用System.IO.File.Move(oldFileName,newFileName)

#5


0  

You can use File.Move, like this:

您可以使用File.Move,如下所示:

string oldFilePath = Path.Combine( Server.MapPath("~/uploads"), "oldFileName");
string newFilePath = Path.Combine( Server.MapPath("~/uploads"), "newFileName");

File.Move(oldFilePath, newFilePath);

#6


0  

On .NET Framework 4.0 I use FileInfo.MoveTo() method that only takes 1 argument

在.NET Framework 4.0上,我使用FileInfo.MoveTo()方法,该方法只需要1个参数

Just to move files my method looks like this

只是为了移动文件我的方法看起来像这样

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);
    }
}

to rename files my method looks like this

重命名文件我的方法看起来像这样

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);
   }
}

AS you can see to Rename file it syntax is almost the same as to Move it, just need to modify the filename before using MoveTo() method.

你可以看到重命名文件,它的语法与Move它几乎相同,只需要在使用MoveTo()方法之前修改文件名。

#1


82  

Have a look at FileInfo.

看看FileInfo。

Do something like this:

做这样的事情:

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));
    }
}

#2


8  

I'll just dump this here since I needed to write this code for my own purposes.

我只是将其转储到此处,因为我需要为自己的目的编写此代码。

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);
    }
}

#3


8  

The function that you are looking for is File.Move(source, destination) of the System.IO namespace. Also take a look at the DirectoryInfo class (of the same namespace) to access the contents of the folder.

您正在寻找的功能是System.IO命名空间的File.Move(源,目标)。另请查看DirectoryInfo类(具有​​相同名称空间)以访问该文件夹的内容。

#4


1  

Check out How can I rename a file in C#?. I didn't know that C# doesn't have a rename... It seems you have to use System.IO.File.Move(oldFileName, newFileName)

查看如何在C#中重命名文件?我不知道C#没有重命名...似乎你必须使用System.IO.File.Move(oldFileName,newFileName)

#5


0  

You can use File.Move, like this:

您可以使用File.Move,如下所示:

string oldFilePath = Path.Combine( Server.MapPath("~/uploads"), "oldFileName");
string newFilePath = Path.Combine( Server.MapPath("~/uploads"), "newFileName");

File.Move(oldFilePath, newFilePath);

#6


0  

On .NET Framework 4.0 I use FileInfo.MoveTo() method that only takes 1 argument

在.NET Framework 4.0上,我使用FileInfo.MoveTo()方法,该方法只需要1个参数

Just to move files my method looks like this

只是为了移动文件我的方法看起来像这样

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);
    }
}

to rename files my method looks like this

重命名文件我的方法看起来像这样

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);
   }
}

AS you can see to Rename file it syntax is almost the same as to Move it, just need to modify the filename before using MoveTo() method.

你可以看到重命名文件,它的语法与Move它几乎相同,只需要在使用MoveTo()方法之前修改文件名。