2017-02-14 38 views
-1
SynEdit

Ich versuche, mithilfe vonFehler beim Laden der TXT-Dateien

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

Aber sobald Sie den Text aus einer Textdatei zu einem synmemo zu laden, wie ich eine Datei auswählen, bekomme ich diesen Fehler:

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

Komponente: https://github.com/TurboPack/SynEdit

+0

Sieht aus wie diese Datei nicht existiert ......... –

+2

Ist die Datei vorhanden, oder Versuchen Sie, einen neuen zu erstellen? Es spielt hier keine Rolle, aber Sie sollten dlgOpen1.FileName verwenden, um die ausgewählte Datei zu öffnen. dlgOpen1.Files kann mehrere Dateien verarbeiten, nicht nur eine. – Dsm

+0

Enthält die Eigenschaft 'Files.Text' den Wert, von dem Sie denken, dass er dies tut? Verwenden Sie Ihre Debugging-Fähigkeiten, um den Wert zu überprüfen und zu bestätigen, dass sich Ihr Programm so verhält, wie Sie es erwarten. –

Antwort

1

Das Problem liegt in der Verwendung der Dateien Eigenschaft des Dialogs die ausgewählten Dateinamen zuzugreifen.

Die Files Eigenschaft ist eine Liste von Strings für die Verwendung, wenn Sie mehrere Auswahl im Dialog und müssen verarbeiten mehr als ein Dateiname durch den Benutzer ausgewählt aktiviert haben.

Die Eigenschaft der Zeichenfolgenliste gibt eine formatierte Darstellung aller Einträge in dieser Liste zurück, wobei jeder Eintrag durch ein EOL Zeichen (oder Zeichen) begrenzt wird.

Sie könnten erwarten, dass diese -Eigenschaft nur den Namen dieser Datei enthält, wenn nur eine einzige Datei betroffen ist. Aber tatsächlich enthält es auch ein EOL Zeichen. dh der Dateiname der mit dieser Technik zu öffnen versuchen, ist eigentlich:

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

Es war tatsächlich ein Hinweis auf das in der Art und Weise, dass die Nachricht angezeigt wurde, mit den letzten Anführungszeichen in einer separaten Zeile als Ergebnis davon EOL.

Die korrekte Vorgehensweise zum Arbeiten mit dem ausgewählten Dateinamen hängt davon ab, ob Sie die Mehrfachauswahl oder Einzelauswahl unterstützen.

Im Fall Einzel Auswahl (Ihr Fall hier) der einfachste Ansatz ist es, die Filename Eigenschaft des Dialogs zu verwenden:

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

Für mehr-Auswahl der Files Eigenschaft verwenden würde, aber Zugriff auf jeden Dateinamen nach Index in der Liste:

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