问题在于使用对话框的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;