【问题标题】:Error loading txt files to synedit将 txt 文件加载到 synedit 时出错
【发布时间】:2017-02-14 16:50:12
【问题描述】:

我正在尝试使用将文本文件中的文本加载到同步备忘录中

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

【问题讨论】:

  • 看起来那个文件不存在......
  • 该文件是否存在,或者您正在尝试创建一个新文件?在这里没关系,但你真的应该使用 dlgOpen1.FileName 打开选定的文件。 dlgOpen1.Files 旨在处理多个文件,而不仅仅是一个。
  • Files.Text 属性是否包含您认为的值?使用您的调试技能来检查它的值并确认您的程序的行为方式符合您的预期。
  • 感谢@Dsm 我用 dlgOpen1.FileName 代替
  • 这里真正的教训虽然与细节无关,但可以在@Rob 的评论中找到。对于此处提出的问题,最常见的解决方案是让提问者提高他们的调试技能。

标签: delphi synedit


【解决方案1】:

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

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

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

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

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

消息的显示方式实际上有一个线索,由于该EOL,右引号位于单独的一行。

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

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

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

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

if dlgOpen1.Execute then
  for i := 0 to Pred(dlgOpen1.Files.Count) do
  begin
    // Do something with each dlgOpen1.Files[i] ...
  end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多