@DmitryKyd
Студент специальности ИАСБ

Как переименовать файлы в папке в алфавитном порядке?

Есть папка с файлами:
(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("Готово!");
        }
    }
}

  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Результат этой сортировки вы собственно и профукали
files.Select(fn => new FileInfo(fn)).OrderBy(f => f.Name); //сортируем в "алфавитном порядке"

И работаете вы с тем, в каком порядке они созданы в каталоге (т.е. рандомно).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы