-1

我正在尝试通过使用将文本从文本文件加载到 synmemo

procedure TForm1.btn7Click(Sender: TObject);
begin
  if dlgOpen1.Execute then
    synm1.Lines.LoadFromFile(dlgOpen1.Files.Text);
end;

但是一旦我选择一个文件,我就会收到这个错误:

无法打开文件“C:\Users\adria\Desktop\New Text Document.txt
”。文件名、目录名或卷标语法不正确。

组件:https ://github.com/TurboPack/SynEdit

4

1 回答 1

1

问题在于使用对话框的Files属性来访问选定的文件名。

Files属性是一个字符串列表,供您在对话框中启用多项选择并需要处理用户选择的多个文件名时使用。

字符串列表的Text属性返回该列表中所有条目的格式化表示,每个条目由一个EOL字符(或多个字符)分隔。

您可能期望在仅涉及单个文件的情况下,此Text属性将仅包含该文件的名称。但实际上它还包括一个EOL字符。即您尝试使用此技术打开的文件名实际上是:

'C:\Users\adria\Desktop\New Text Document.txt'#13#10

实际上,消息的显示方式有一个线索,作为EOL的结果,右引号在单独的行上。

使用所选文件名的正确方法取决于您是支持多选还是单选。

单选的情况下(您的情况),最简单的方法是使用Filename对话框的属性:

if dlgOpen1.Execute then
  synm1.Lines.LoadFromFile(dlgOpen1.Filename);

对于多项选择,您将使用该Files属性,但通过列表中的索引访问每个文件名:

if dlgOpen1.Execute then
  for i := 0 to Pred(dlgOpen1.Files.Count) do
  begin
    // Do something with each dlgOpen1.Files[i] ...
  end;
于 2017-02-14T20:45:34.540 回答