自动递增文件名?

时间:2013-08-18 02:20:15

标签: c# .net

我有一个像这样的文件列表

  

abc.txt
  pas.txt
  tempr.txt

我想做的是将英文字母附加到theese文件名中。 结果应该是这样的

  

abc_a.txt
  pas_b.txt
  tempr_c.txt

这个过程应该持续到最后一个字符(即'z')。如果有更多文件,那么文件名将变为

  

abc_a.txt
  pas_b.txt
  tempr_c.txt
  .................
  filename_z.txt
  anotherfilename_a001.txt

请注意,计数器再次重置为第一个字符,但附加了一个整数。

这是我现在的代码。请注意,它不起作用..

string alphabets= "abcdefghijklmnopqrstuvwxyz";
List<string> filenames = new List<string>();
filenames.Add("test1.txt");
filenames.Add("newfile.cs");
filenames.Add("test2.txt");
filenames.Add("newfile2.cs");


string currentFileNmae = string.Empty;

foreach(string s in filenames) {
    char usedAlphabet = new char();
    for(int i = 0;i<=alphabets.Length-1;i+=11) {
        usedAlphabet.Dump();
        alphabets[i].Dump();
        if(usedAlphabet != alphabets[i] )
        {
            if(currentFileNmae!= s)  
            {
                string.Format("{0}--{1}",s,alphabets[i]).Dump();
                usedAlphabet = alphabets[i];
                currentFileNmae = s;
            }

        }


        break;

    }

}

我是一个为我们的内部目的构建文件重命名工具的团队的一员,因此我需要这个代码。这是我们计划的enumertation功能的一部分。

请建议。 感谢

3 个答案:

答案 0 :(得分:1)

尝试从这里开始:

using System.Diagnostics;
using System.IO;

string filename = @"C:\Foo\Bar.txt";

for (int count = 0; count < 100; count++)
{
    char letter = (char)((int)'a' + count % 26);
    string numeric = (count / 26) == 0 ? "" : (count / 26).ToString("000");
    Debug.Print(Path.GetFileNameWithoutExtension(filename) + "_" + letter + numeric + Path.GetExtension(filename));
}

替换您自己的循环来浏览文件名并使用Path来操作名称的部分/部分。

重命名IIRC可由File.Move处理。用try / catch包围它以实现名称冲突逻辑。

答案 1 :(得分:0)

您可以尝试这样的事情

const string directory = @"C:\\wherever";
string[] fiNames = new string[]{ "abc", "pas", "etc",};
char[] alphabet =       "abcdefghijklmnopqrstuvwxyz".ToCharArray();
int x = 0;
 string ending = "";
for(int i = fiNames.Count()-1; i>=0; i--)
{
  if(x%26==0)
   {
      x=0 
       if( ending=="")
          ending="1";
       else
          ending=(System.Convert.ToInt32(ending)+1).ToString();
    }
  System.IO.File.Move(directory+fiNames[i], fiNames[i]+alphabet[x].ToString()+ending); 
x++;
}

答案 2 :(得分:0)

还没有咖啡,但这应该做。

List<string> files = new List<string>();


        int charIndex = 0;
        int numericIndex = -1;

        foreach (var file in files.Select(path => new FileInfo(path)))
        {
            // Create new Filename - This may needs some tuning 
            // to really remove only the extension ad the end
            // It doesnt take care of things like
            // file.bmp.bmp.bmp ...
            string newFileName =  String.Format("{0}_{1}{2}.{3}", 
                file.FullName.Replace(file.Extension,String.Empty),
                (char)(charIndex++ + 97), 
                (numericIndex > -1 ? String.Format("{0:D4}", numericIndex) : String.Empty), 
                file.Extension);

            // Rename the File
            file.MoveTo(newFileName);

            // Increment Counters.
            if (charIndex > 25)
            {
                charIndex = 0;
                numericIndex++;
            }
        }