Есть папка с файлами:
(1).pdf
(2).pdf
(10).pdf
(20).pdf
Есть файл .txt с содержанием:
1.003.1924.003.4
1.003.1924.004.4
1.003.1924.005.4
1.003.1924.006.4
Нужно перименовать файлы в папке в соответсии с файлом .txt
Переименование файлов я реализовал, код приведу ниже. Но есть проблема. На Windows 10 переименовывает файлы в "алфавитном порядке", т.е. (1).pdf->(2).pdf->(10).pdf->(20).pdf А на Windows 7 "алфавитный порядок" считается другим: (1).pdf->(10).pdf->(2).pdf->(20).pdf
Чтобы исправить это, можно добавить вперед нули, т.е. мы получим файлы:
(001).pdf
(002).pdf
(010).pdf
(020).pdf
Тогда он воспринимает "алфавитный порядок" правильно. Предпологаю, что нужно добавить метод проверки названия файла через регулярные выражения и менять его, когда он только записывает файлы в массив.
Подскажите, как это сделать правильно. Или если есть более рациональный выход из этой ситуации, выслушаю с удовольствием. Заранее спасибо.
Код программыusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
namespace Переименование_файлов
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string [] files; //пути всех файлов
public string file; //путь файла .txt
private void КнопкаОбзор_Click(object sender, EventArgs e) //вызов окна для выбора папки
{
DialogResult result = ОкноОбзорПапка.ShowDialog();
if (result == DialogResult.OK)
{
ПутьПапка.Text = ОкноОбзорПапка.SelectedPath;
files = Directory.GetFiles(ОкноОбзорПапка.SelectedPath); //получаем файлы
files.Select(fn => new FileInfo(fn)).OrderBy(f => f.Name); //сортируем в "алфавитном порядке"
}
}
private void КнопкаОбзорФайл_Click(object sender, EventArgs e) //вызов окна для выбора файла
{
DialogResult result = ОкноОбзорФайл.ShowDialog();
if (result == DialogResult.OK)
{
ПутьФайл.Text = ОкноОбзорФайл.FileName;
file = ПутьФайл.Text;
}
}
private void КнопкаПереименовать_Click(object sender, EventArgs e) //метод переименования
{
string[] arStr = File.ReadAllLines(file); //читаем файл построчно
int ind = 0;
for (int i = 0; i < files.Length; i++)
{
ind = files[i].LastIndexOf('\\');
File.Move(files[i], files[i].Remove(ind + 1) + arStr[i] + ".pdf"); //переименовываем файлы
}
MessageBox.Show("Готово!");
}
}
}