Как поменять кодировку для записи в файл? - 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
Unit Unit1;
 
interface
 
uses System, System.Drawing, System.Windows.Forms;
 
type
  Form1 = class(Form)
    procedure button1_Click(sender: Object; e: EventArgs);
    procedure folderBrowserDialog1_HelpRequest(sender: Object; e: EventArgs);
    procedure button2_Click(sender: Object; e: EventArgs);
    procedure checkBox1_CheckedChanged(sender: Object; e: EventArgs);
    procedure Form1_Load(sender: Object; e: EventArgs);
  {$region FormDesigner}
  private
    {$resource Unit1.Form1.resources}
    button1: Button;
    label1: &Label;
    folderBrowserDialog1: FolderBrowserDialog;
    button2: Button;
    checkBox1: CheckBox;
    label2: &Label;
    components: System.ComponentModel.IContainer;
    {$include Unit1.Form1.inc}
  {$endregion FormDesigner}
  public
    constructor;
    begin
      InitializeComponent;
    end;
  end;
 
implementation
var path : string;
var icacls:='icacls';
var takeown:='takeown';
var pause := true;
procedure FileError;
begin
MessageBox.Show('Не выбран путь для сброса прав доступа','Ошибка',MessageBoxButtons.OK,MessageBoxIcon.Warning);
end;
procedure Form1.button1_Click(sender: Object; e: EventArgs);
begin
  folderBrowserDialog1.ShowDialog;
  path:=folderBrowserDialog1.SelectedPath;
  label1.Text:=path;
end;
 
procedure Form1.folderBrowserDialog1_HelpRequest(sender: Object; e: EventArgs);
begin  
end;
 
procedure Form1.button2_Click(sender: Object; e: EventArgs);
begin
  if path='' then FileError else
  begin
  var f : PABCSystem.Text;
  assign(f,'tmp.bat');
  rewrite(f,'866');
  //writeln(f,'chcp 1252');
  writeln(f,takeown,' /f ','"',path,'"',' /r /d y');
  writeln(f,icacls,' "',path,'"',' /reset /T');
  if pause then writeln(f,'pause');
  PABCSystem.close(f);
  Execute('tmp.bat');
  end;
end;
 
procedure Form1.checkBox1_CheckedChanged(sender: Object; e: EventArgs);
begin
  if pause then pause:=false else pause:=true;
end;
 
procedure Form1.Form1_Load(sender: Object; e: EventArgs);
begin
 
end;
 
end.

Код к задаче: «Как поменять кодировку для записи в файл? - PascalABC.NET»

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;

10   голосов, оценка 4.100 из 5


СОХРАНИТЬ ССЫЛКУ