Topic: Открыть файл с пробелами в адресе

Не нашел, спрашивал ли уже кто или нет, но столкнулся с такой проблемой:

var
prog,file:string;
begin
prog:= 'C:\Program Files (x86)\Windows NT\Accessories\wordpad.exe';
file:= 'D:\MailCloud\Программирование\My Visual Database\DistribCat\ReadMe.rtf';
OpenFile(file,prog);

При попытке выполнения этого кода вылазит ошибка, что не найден файл и выдается путь "D:\MailCloud\Программирование\My", т.е. до первого пробела. Как этого избежать?

Re: Открыть файл с пробелами в адресе

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

попробуйте так

var
prog,file:string;
begin
prog:= 'C:\Program Files (x86)\Windows NT\Accessories\wordpad.exe';
file:= '"D:\MailCloud\Программирование\My Visual Database\DistribCat\ReadMe.rtf"';
OpenFile(file,prog);
Dmitry.

Re: Открыть файл с пробелами в адресе

Спасибо! Работает.

Re: Открыть файл с пробелами в адресе

Подскажите, пожалуйста, а как сделать следующее:
1) Открыть не файл, а папку.
2) Вызвать диалог открытия папки.
3) Удалить папку с подпапками.

Re: Открыть файл с пробелами в адресе

DriveSoft wrote:

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

попробуйте так

var
prog,file:string;
begin
prog:= 'C:\Program Files (x86)\Windows NT\Accessories\wordpad.exe';
file:= '"D:\MailCloud\Программирование\My Visual Database\DistribCat\ReadMe.rtf"';
OpenFile(file,prog);

Проверил ещё раз это решение. Оно работает, если путь к файлу точно известен, а если надо использовать команды ExtractFilePath или ExtractFileDir, то ошибка опять появляется. Для того, чтобы этого избежать, я ввел проверку на наличие пробелов в пути. Финальный вариант процедуры такой:

procedure FrMain_Button2_OnClick (Sender: string; var Cancel: boolean);
var
  prog,file,path:string;
begin
  path:= ExtractFilePath(Application.ExeName); //получаем путь к папке
  prog:=path+'SoloPad.exe'; //получаем путь к программе, которая находится в папке с исполняемым файлом. 
  If Pos(' ', path) Then //проверяем наличие пробелов в пути
    file:= '"'+path+'ReadMe.rtf"' // если есть, то заключаем в кавычки
  else
    file:= path+'ReadMe.rtf'; // если нет, то ничего не делаем. 

  OpenFile(file,prog);
end;

Re: Открыть файл с пробелами в адресе

alex842

1.

OpenFile('D:\Films');

2. Добавил новую функцию в бета версию 1.46, скачайте ее: https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0
SelectDirectory(const Caption: string; const Root: String; var Directory: string) : Boolean

procedure Form1_Button8_OnClick (Sender: string; var Cancel: boolean);
var
   sFolder: string;
begin
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end;

3. С этим пока сложней, постараюсь позже реализовать.

Dmitry.

Re: Открыть файл с пробелами в адресе

alex842
попробуйте без проверок, просто сделав так, думаю кавычки в любом случае не помешают

OpenFile('"' + file + '"',prog);
Dmitry.

Re: Открыть файл с пробелами в адресе

DriveSoft wrote:

alex842
попробуйте без проверок, просто сделав так, думаю кавычки в любом случае не помешают

OpenFile('"' + file + '"',prog);

Действительно, так значительно проще. smile

Кстати, заметил, что функция "ExtractFilePath" два раза в скриптах отображена: в разделе Other и Files.

2. Добавил новую функцию в бета версию 1.46, скачайте ее: https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0
SelectDirectory(const Caption: string; const Root: String; var Directory: string) : Boolean

А если бы ещё можно было и начальную папку задавать... roll

Re: Открыть файл с пробелами в адресе

А если бы ещё можно было и начальную папку задавать...

procedure Form1_Button8_OnClick (Sender: string; var Cancel: boolean);
var
   sFolder: string;
begin
     sFolder := 'd:\Films';
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end;
Dmitry.

10 (edited by kunar80 2014-10-29 11:05:59)

Re: Открыть файл с пробелами в адресе

DriveSoft wrote:

А если бы ещё можно было и начальную папку задавать...

procedure Form1_Button8_OnClick (Sender: string; var Cancel: boolean);
var
   sFolder: string;
begin
     sFolder := 'd:\Films';
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end;

А у меня это почему-то не работает sad ???  Есть пустая Form1 с одной кнопкой Button1. Скрипт записал так:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);

var
   sFolder: string;

begin
     sFolder := 'c:\Documents and Settings';
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end.

Упорно пишет: ';' expected at 12:4  (12:4 - это после закрывающего "end")
Кнопка не функционирует, указанную папку не открывает.

Не боги горшки лепят!

Re: Открыть файл с пробелами в адресе

kunar80
вы забыли один закрывающий end, должно быть так

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   sFolder: string;
begin
     sFolder := 'c:\Documents and Settings';
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end;


begin

end.

обратите внимание на последние
begin

end.


они всегда должны присутствовать в скрипте в самом низу, между ними вы также можете написать код, который будет исполнен сразу после старта программы.

Dmitry.

12 (edited by kunar80 2014-10-29 11:18:41)

Re: Открыть файл с пробелами в адресе

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

Не боги горшки лепят!

Re: Открыть файл с пробелами в адресе

kunar80
есть какая либо ошибка?
Функция SelectDirectory появилась только в версии 1.46


Если у вас последняя версия и все равно не открывает, пожалуйста, пришлите проект на support@drive-software.com
посмотрю в чем дело.

Dmitry.

Re: Открыть файл с пробелами в адресе

Дмитрий! Проект Вы видели и правили. Сейчас я просто пытаюсь на пустой форме экспериментировать.

Не боги горшки лепят!

Re: Открыть файл с пробелами в адресе

kunar80

Я сделал для вас тестовый проект:

Post's attachments

Attachment icon Open Folder.zip 2.33 kb, 578 downloads since 2014-10-29 

Dmitry.

Re: Открыть файл с пробелами в адресе

Спасибо.

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   sFolder: string;
begin
     sFolder := 'с:\';
     if SelectDirectory('Select folder', '', sFolder) then
     begin
          ShowMessage(sFolder);
     end;
end;


begin

end.

Открывает "Обзор папок". А как дописать, чтобы по процедуре увидеть именно содержимое указанной папки?

Не боги горшки лепят!

Re: Открыть файл с пробелами в адресе

kunar80

для этого есть функция OpenFile, она универсальна, может открыть как файл так и папку

OpenFile('c:\Films');
Dmitry.

18 (edited by kunar80 2014-10-29 21:39:03)

Re: Открыть файл с пробелами в адресе

Спасибо! В тестовом работает:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);

var
   sFolder: string;

begin
OpenFile('c:\Documents and Settings\Фильм\VIDEO');
end;


begin

end.

Осталось перенести в свой проект smile
С помощью Дмитрия РЕШЕНО: ответ в теме "Решебник"

Не боги горшки лепят!