【问题标题】:Renaming image files重命名图像文件
【发布时间】:2012-11-11 21:56:48
【问题描述】:

我想用C# 重命名包含 3.000 个图像文件的目录 (C:\Users\userPC\Desktop\MATT\PROVA\IMG\AW12)。这些图像实际上具有这种类型的名称:

area1_area2_area3_area4.jpg

我想把area2和area4组成一个新文件重命名为area2_area4.jpg。这些区域没有固定数量的字符。我能怎么做?我发现这个讨论Rename image files on server directory

但我是一个编程新手,我不知道如何解决我的问题。

【问题讨论】:

  • 使用System.IOSystem.Text.RegularExpressions 中的类会非常简单。向 google 寻求有关这些命名空间的帮助,这不会花你很长时间!
  • 区域之间有区域分隔符吗?我的意思是例如'_'
  • @looper 我尝试了一些从网络上获取的代码,但不起作用。我的想法是使用 FileStream,但不幸的是,我还是新手,自己编写了一个完整的脚本。
  • @trippino 是的,下划线将四个区域分开。

标签: c# image rename


【解决方案1】:

这是一个解决方案。请注意,在弄乱之前它不会检查:)

public void rename(String path)
{
  string[] files =System.IO.Directory.GetFiles(path);
  foreach(string s in files)
  {
     string[] ab=s.split('_');
     if(ab.Lenght>3)  
     {
         string newName=ab[1]+ab[3];
         System.IO.File.Move(s,path+newName);
     }
  }
}

你必须使用这种类型的参数调用方法

rename("C://Users//userPC//Desktop//MATT//PROVA//IMG//AW12//")

这里可以更改分隔符->s.split('_')

【讨论】:

  • 感谢 nucandrei 抽出宝贵时间。我已经尝试了您的代码,但是我通过调试器 JIt 获得了一条错误消息,上面写着“索引超出了数组的范围。继续。退出”。你知道为什么吗?
  • 可能在文件夹内有一些文件没有 3 个分隔符。您应该在设置新名称之前检查它。尝试添加“if(ab.Lenght>3){string newName=....”
  • trippino 可能有一个很好的提示。此错误通常是在访问您的数组不支持的索引时。因此,在这种情况下,您有一些不尊重 area1_area2_area3_area4.jpg 格式的文件
  • 感谢您的提示。事实上,我看到有些文章只有 3 个领域。我已经删除了它们,但是,我已经添加了您向我建议的控件。但不幸的是仍然会产生一个异常:“如果已经存在则无法创建文件”?!?!关于最后一行的参数:写“System.IO.File.Move(newName, path);”不正确吗?
  • 此消息现在出现是因为重命名操作在多个文件上成功(在收到错误之前)
【解决方案2】:

首先获取文件夹中包含的文件名列表

var listOfFileNames = Directory.GetFiles(directory);

您提到这些区域没有固定数量的字符(我假设这些区域由下划线字符分隔)。因此,将每个文件名分成四个区域,使用下划线字符作为分隔符。

然后建立你的新文件名,例如,

foreach(var fileName in listOfFileNames)
{
    var areas = fileName.Split('_');
    var newFileName = string.Format({0}{1}{2}, areas[0], areas[1],".jpg");
}

希望对你有帮助

【讨论】:

  • 感谢 user65439 抽出宝贵时间。我试过这个: void Button1Click(object sender, EventArgs e) { var listOfFileNames = Directory.GetFiles("C://Users//userPC//Desktop//MATT SUPERDRY//PROVA//IMG// AW12 //"); foreach(var fileName in listOfFileNames) { var area = fileName.Split('_'); var newFileName = string.Format({0}{1}{2}, area[1], area[3], ".jpg"); File.Move(fileName, listOfFileNames + newFileName); } 但它会在“var newFileName”行中产生一些错误。 :(
【解决方案3】:
using System.IO;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Rename all files in the C:\Temp\ directory.
            Program.RenameFiles(new DirectoryInfo(@"C:\Temp\"));
        }

        public static void RenameFiles(DirectoryInfo path)
        {
            // Does the path exist?
            if (path.Exists)
            {
                // Get all files in the directory.
                FileInfo[] files = path.GetFiles("*.jpg");
                foreach (FileInfo file in files)
                {
                    // Split the filename
                    string[] parts = file.Name.Split('_');
                    // Concatinate the second and fourth part.
                    string newFilename = string.Concat(parts[1], "_", parts[3]);
                    // Combine the original path with the new filename.
                    string newPath = Path.Combine(path.FullName, newFilename);
                    // Move the file.
                    File.Move(file.FullName, newPath);
                }
            }
        }
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 2018-12-20
  • 2012-04-07
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多