переименовать несколько файлов в последовательности c # или c ++ - PullRequest
0 голосов
/ 04 сентября 2011

Как я могу переименовать несколько файлов, например:

file.txt , anotherfile.txt , log.txt

, примерно так:

file1.txt , file2.txt , file3.txt

Как мне это сделать в c # или в c ++?

Ответы [ 4 ]

2 голосов
/ 04 сентября 2011

Используйте File.Move Method как:

IEnumerable<FileInfo> files = GetFilesToBeRenamed();
int i = 1;
foreach(FileInfo f in files)
{
    File.Move(f.FullName, string.Format("file{0}.txt", i));
    i++;
}

И если f - полный путь, тогда вы можете сделать это вместо:

File.Move(f.FullName, 
         Path.Combine(f.Directory.ToString(), string.Format("file{0}.txt", i));
1 голос
/ 04 сентября 2011

В c ++ вы в конечном итоге будете использовать

std::rename(frompath, topath);

для выполнения действия. Предложение TR2 N1975 охватывает эту функцию. Однако до тех пор используйте boost :: rename для ближайшего будущего и tr2 :: rename для периода после утверждения до окончательного размещения.

Прокрутите и используйте любые имена, которые вы хотите. Не совсем знаю, если вы пытаетесь добавить цифры, потому что текущий вопрос говорит 1, 2, 2.

1 голос
/ 04 сентября 2011

Это будет работать, если вы используете оболочку на основе sh:

#!/bin/sh
FEXT="txt"      # This is the file extension you're searching for
FPRE="file"     # This is the base of the new files names file1.txt, file2.txt, etc.
FNUM=1;         # This is the initial starting number

find . -name "*.${FEXT}" | while read OFN ; do
    # Determine new file name
    NFN="${FPRE}${FNUM}.${FEXT}"
    # Increment FNUM
    FNUM=$(($FNUM + 1))
    # Rename File
    mv "${OFN}" "${NFN}"
done

Сценарий в действии:

[james@fractal renfiles]$ touch abc.txt
[james@fractal renfiles]$ touch test.txt
[james@fractal renfiles]$ touch "filename with spaces.txt"
[james@fractal renfiles]$ ll
total 4
-rw-rw-r-- 1 james james   0 Sep  3 17:45 abc.txt
-rw-rw-r-- 1 james james   0 Sep  3 17:45 filename with spaces.txt
-rwxrwxr-x 1 james james 422 Sep  3 17:41 renfiles.sh
-rw-rw-r-- 1 james james   0 Sep  3 17:45 test.txt
[james@fractal renfiles]$ ./renfiles.sh 
[james@fractal renfiles]$ ll
total 4
-rw-rw-r-- 1 james james   0 Sep  3 17:45 file1.txt
-rw-rw-r-- 1 james james   0 Sep  3 17:45 file2.txt
-rw-rw-r-- 1 james james   0 Sep  3 17:45 file3.txt
-rwxrwxr-x 1 james james 422 Sep  3 17:41 renfiles.sh
0 голосов
/ 04 сентября 2011

В c # вы можете использовать File.Move (source, dest)

Конечно, вы можете сделать это программно:

string[] files = new string[] {"file.txt" , "anotherfile.txt" , "log.txt"}:
int index = 0;
string Dest;
foreach (string Source in files)
{
   if (!Files.Exists(Source )) continue;
   do {
       index++;
       Dest= "file"+i+".txt";
   } while (File.Exists(NewName);

   File.Move(Source , Dest); 
}
...