Как поменять кодировку для записи в файл? - PascalABC.NET
Формулировка задачи:
Программа должна создавать bat-файл с командами takeown и icacls. Когда я открываю файл в любом редакторе, то всё на месте, однако, когда программа пытается выполнить файл, то в коммандной строке винды русские символы в пути файла превращаются в нечитабельную кашу, но это каша из русских символов. Например, "Новая папка" превращается в "═ютр* яряър". С версии 3.1 в ABC.NET добавили параметр кодировки для Reset, Rewrite, Append, OpenRead, OpenWrite и OpenAppend. У меня версия 3.1.1190. При попытке написать rewrite(f,866) выдаёт ошибку, но c rewrite(f,'866') ошибки нет, но кодировка всё-равно стандартная 1251. Как поменять её на 866, котоую понимает cmd? Винда 8.1
Решение задачи: «Как поменять кодировку для записи в файл?»
textual
Листинг программы
procedure Form1.button2_Click(sender: Object; e: EventArgs); begin if path='' then FileError else begin WriteAllLines('tmp.bat', new string[3](Format('{0} /f "{1}" /r /d y', takeown, path), Format('{0} "{1}" /reset /T', icacls, path), pause ? 'pause' : '' ), System.Text.Encoding.GetEncoding(866)); Execute('tmp.bat'); end; end;
Объяснение кода листинга программы
- Задача программы - поменять кодировку для записи в файл.
- Если путь к файлу пустой, то выводится сообщение об ошибке.
- Используется функция WriteAllLines для записи в файл 'tmp.bat' массива строк.
- Массив строк содержит три элемента.
- Первая строка формируется с помощью функции Format и содержит команду 'takeown /f
путь к файлу
/r /d y'. - Вторая строка формируется с помощью функции Format и содержит команду 'icacls
путь к файлу
/reset /T'. - Если переменная pause имеет значение 'true', то в качестве третьей строки используется 'pause'.
- Если переменная pause имеет значение 'false', то в качестве третьей строки используется пустая строка.
- Для записи в файл используется кодировка System.Text.Encoding.GetEncoding(866).
- Выполняется команда 'tmp.bat'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д