Как поменять кодировку для записи в файл? - 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;

Объяснение кода листинга программы

  1. Задача программы - поменять кодировку для записи в файл.
  2. Если путь к файлу пустой, то выводится сообщение об ошибке.
  3. Используется функция WriteAllLines для записи в файл 'tmp.bat' массива строк.
  4. Массив строк содержит три элемента.
  5. Первая строка формируется с помощью функции Format и содержит команду 'takeown /f путь к файлу /r /d y'.
  6. Вторая строка формируется с помощью функции Format и содержит команду 'icacls путь к файлу /reset /T'.
  7. Если переменная pause имеет значение 'true', то в качестве третьей строки используется 'pause'.
  8. Если переменная pause имеет значение 'false', то в качестве третьей строки используется пустая строка.
  9. Для записи в файл используется кодировка System.Text.Encoding.GetEncoding(866).
  10. Выполняется команда 'tmp.bat'.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы