Hola gente, les hago alguna consulta para ver si alguien me puede ayudar... resulta que me encuentro realizando un IDE para el lenguaje de programacion BENNUGD encontré que cuando quiero abrir un archivo que se encuentra en una dirección muy larga o el nombre de la carpeta cuenta con espacios, lo abre pero no lo compila ni ejecuta. Luego si el mismo programa lo coloco en una ruta corta donde las carpetas no contienen espacios ahi compila bien. les pongo el código del proceso que abre el archivo en lazarus (delphi).
Tengo una unit que se encarga del manejo de archivos, en esta tengo el siguiente código.
Código Delphi
[-]implementation
procedure Tarchivo.abrirArchivo(miArchivoF:ansistring;var editor:TsynEdit);
var texto:string;
begin
AssignFile(miArchivo,miArchivoF);
Reset(miArchivo);
while not eof(miArchivo) do
begin
readln(miArchivo,texto);
editor.lines.add(texto);
end;
CloseFile(miArchivo);
end;
Luego en el programa principal en el botón para abrir un programa tengo el siguiente código:
Código Delphi
[-]procedure TForm1.BotonAbrirClick(Sender: TObject);
var archivoA:Tarchivo;
begin
dialogoabrir.Execute;
if (dialogoabrir.Execute) then
begin
editor.Text:='';
nombreArchivo := dialogoabrir.FileName;
archivoA:=Tarchivo.Create;
archivoA.abrirArchivo(nombreArchivo,editor);
end;
archivoA.Free;
end;
la variable nombreArchivo es de tipo AnsiString y la declare como pública.
ahora les pongo el código del botón para compilar y ejecutar
Código Delphi
[-]procedure TForm1.CompilarEjecutarClick(Sender: TObject);
var cadenaSinExtension:ansistring;
cantidadCar:integer;
begin
{$H+}
cantidadCar:=length(nombreArchivo);
cadenaSinExtension := Copy( nombreArchivo, 1, cantidadCar-4 );
Aprocess:=Tprocess.Create(nil);
Aprocess1:=Tprocess.Create(nil);
{$IFDEF WIN32}
Aprocess.CommandLine:='CMD /K bgdc.exe '+nombreArchivo;
Aprocess1.CommandLine:='bgdi.exe '+cadenaSinExtension;
{$ENDIF}
{$IFDEF LINUX}
Aprocess.CommandLine:='bgdc '+nombreArchivo;
Aprocess.CommandLine:='bgdi '+cadenaSinExtension;
{$ENDIF}
Aprocess.Execute;
Aprocess.Free;
Aprocess1.Execute;
Aprocess1.Free;
end;
Bueno, muchas gracias!!!
saludos!