2015-04-26 2 views
2

Файл находится внутри каталога, в котором находится программное обеспечение. Я пытаюсь добавить текстовый файл в блокнот.Система не может найти указанный файл

procedure TForm4.FormCreate(Sender: TObject); 
var 
    dir : string; 
begin 
    Form4.Caption:='Abateri instrumente'; 
    dir := GetCurrentDir; 
    Memo1.Lines.LoadFromFile(dir+'\abateri.txt'); 
end; 
+0

Использование, например. 'Memo1.Lines.LoadFromFile (ExtractFilePath (ParamStr (0)) + 'abateri.txt');'. – TLama

+0

Я получаю ту же ошибку: «Exception EFopenerrro» «Система не может найти указанный файл» –

+0

Исключено исключение 'EFopenerrro'. Будьте конкретны, если хотите получить помощь. – TLama

ответ

6

В вашей конкретной ситуации, вы должны загрузить файл с кодом

Memo1.Lines.LoadFromFile(dir+'\abateri.txt.txt'); 

Это происходит потому, что на скриншоте ниже, что вы предоставили, расширение файла Project3 скрыто, который загружает в вывод о том, что опция скрытия известных расширений файлов включена. Показывается одно для файла abateri.txt, что может привести только к часто наблюдаемой ошибке двойного расширения.

Supplied screenshot of the error

Либо переименовать файл и удалить избыточную часть (первый .txt, который является предпочтительным) или использовать двойное расширение в вашем коде.
Я хотел бы также предложить отключить эту опцию в проводнике Windows:
Инструменты>Свойства папки>Просмотр> Снимите флажок «Скрывать расширения известных типов файлов»

В дополнение к вышесказанному, вы должны всегда создавайте пути с помощью вызова функции TPath.Combine, чтобы убедиться, что они верны. Вы можете найти в документации этого here

+0

Нет, вы должны прекратить использовать функцию GetCurrentDir для получения каталога приложения (вы можете разбить ее просто, вызвав SetCurrentDirectory). Но хороший улов с этим расширением! – TLama

+0

Отличный вывод. Я также полностью поддерживаю ваше предложение относительно неопределенных расширений известных типов файлов –

+0

@TLama, я полностью согласен с ними. В сегодняшнем возрасте никогда не следует использовать каталог приложений, слишком много проблем с UAC. Нужно скорее использовать папку «AppData» для записи/чтения файлов с самообслуживанием –

2

файл находится в директории, где программное обеспечение является.

В этом случае поиск в рабочем каталоге неправильного подхода. Нет причин, по которым рабочий каталог должен быть каталогом, в котором находится ваш исполняемый файл. Вам необходимо использовать:

Dir := ExtractFilePath(ParamStr(0)); // the directory where the executable resides 
TPath.Combine(Dir, FileName); // TPath is from the System.IOUtils unit 

Конечно, ваша другая проблема в том, что вы неправильно указали свое имя файла. Файл фактически называется abateri.txt.txt.

Смежные вопросы