2017-02-14 8 views
-1

Я пытаюсь загрузить текст из текстового файла в synmemo с помощьюОшибка загрузки TXT файлы SynEdit

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

Но как только я выбираю файл я получаю эту ошибку:

Cannot open file "C:\Users\adria\Desktop\New Text Document.txt
". The filename, directory name, or volume label syntax is incorrect.

Компонент: https://github.com/TurboPack/SynEdit

+0

Похоже, что файл не существует ......... –

+2

существует ли файл, или вы пытаетесь создать новую? Здесь неважно, но вы действительно должны использовать dlgOpen1.FileName, чтобы открыть выбранный файл. dlgOpen1.Files предназначен для обработки нескольких файлов, а не только одного. – Dsm

+0

Свойство 'Files.Text' содержит значение, которое, по вашему мнению, имеет значение? Используйте свои навыки отладки, чтобы проверить его ценность и подтвердить, что ваша программа ведет себя так, как вы ожидаете. –

ответ

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;