PDA

Ver la Versión Completa : Grabar archivos de texto


jarr-o
30-06-2008, 22:01:44
Hola a todos mi problema es que necesito guardar un archivo de texto que yo creo en tiempo de ejecucion pero me gustaria que el usuario pudiera indicar en donde se va a guardar ese archivo aqui esta el codigo del procedimiento que estoy utilizando

procedure TT_MovTraspasoSalida.Generardocumento;
var
fecha, hora, nombrearchtxt: string;
begin
fecha := StringReplace (DateToStr (Now), '/', '_', [rfReplaceAll]);
nombrearchtxt := ExtractFilePath (Application.ExeName) + 'Traspasos\' + 'TS' + fecha + '.txt';
Memo1.Clear;
IBOQueryConDoc.Open;
IBOQueryConDoc.First;
while not (IBOQueryConDoc.EOF) do
begin
Memo1.Lines.Add (IBOQueryConDocACO_CODIGO.AsString + ',' +
IBOQueryConDocSAD_CANTIDAD.AsString);
IBOQueryConDoc.Next;
end;
Memo1.Lines.SaveToFile (nombrearchtxt);
ShowMessage ('Se a generado un documento para este traspaso en: ' + nombrearchtxt);
end;

el archivo que necesito guardar es nombrearchtxt, por lo pronto estoy extrayendo el nombre del directorio donde se encuentra el ejecutable de mi aplicacion y lo guardo en un subdirectorio 'Traspasos' pero lo que necesito es mediante un dialogo que el usuario pueda decirle a mi aplicacion donde desea guardar este archivo

Gracias anticipadas por su ayuda

AzidRain
30-06-2008, 22:19:04
busca TSaveDialog en la ayuda de Delphi, verás que trae un ejemplo muy bueno para lo que quieras hacer.

jarr-o
30-06-2008, 22:56:56
Gracias por tu respuesta
la ayuda de mi delphi no esta funcionando en este momento pero he
probado el componente que me dijiste y ha funcionado muy bien nada mas que ahora tengo otra pregunta ¿Se puede hacer que el usuario no pueda darle el nombre al archivo? porque se lo debo de generar yo mismo y orita lo que estoy haciendo es mostrar el nombre que genere en el dialogo pero quisiera que no pudieran modificarlo
no se si alguna de las propiedades de este componente me permitan hacer esto
aqui esta el nuevo codigo y gracias nuevamente por tu respuesta

procedure TT_MovTraspasoSalida.Generardocumento;
var
fecha, hora, nombrearchtxt: string;
begin
fecha := StringReplace (DateToStr (Now), '/', '_', [rfReplaceAll]);
hora := StringReplace (TimeToStr (Now), ':', '', [rfReplaceAll]);
hora := StringReplace (hora, '.', '', [rfReplaceAll]);
Memo1.Clear;
SaveDialog1.FileName := 'TS' +
fecha + StrSinEspa (hora) + '.txt';
if not SaveDialog1.Execute then exit;
begin
nombrearchtxt := SaveDialog1.FileName;
end;
IBOQueryConDoc.Open;
IBOQueryConDoc.First;
while not (IBOQueryConDoc.EOF) do
begin
Memo1.Lines.Add (IBOQueryConDocACO_CODIGO.AsString + ',' +
IBOQueryConDocSAD_CANTIDAD.AsString);
IBOQueryConDoc.Next;
end;
Memo1.Lines.SaveToFile (nombrearchtxt);
ShowMessage ('Se a generado un documento para este traspaso en: ' + nombrearchtxt);
end;

Caro
01-07-2008, 03:47:05
Hola jarr-o, puedes utilizar la función SelectDirectory que te muestra un cuadro de dialogo para poder seleccionar el directorio. Para que te funcione debes añadir en uses la unidad FileCtrl.


procedure TT_MovTraspasoSalida.Generardocumento;
var
fecha, hora, nombrearchtxt: string;
Carpeta : String;
begin
fecha := StringReplace (DateToStr (Now), '/', '_', [rfReplaceAll]);
hora := StringReplace (TimeToStr (Now), ':', '', [rfReplaceAll]);
hora := StringReplace (hora, '.', '', [rfReplaceAll]);
Memo1.Clear;

if SelectDirectory('Seleccione la ruta de la carpeta', '', Carpeta) then
nombrearchtxt := Carpeta +'\'+ 'TS' + fecha + StrSinEspa (hora) + '.txt';

IBOQueryConDoc.Open;
IBOQueryConDoc.First;
while not (IBOQueryConDoc.EOF) do
begin
Memo1.Lines.Add (IBOQueryConDocACO_CODIGO.AsString + ',' +
IBOQueryConDocSAD_CANTIDAD.AsString);
IBOQueryConDoc.Next;
end;
Memo1.Lines.SaveToFile (nombrearchtxt);
ShowMessage ('Se a generado un documento para este traspaso en: ' + nombrearchtxt);
end;


Saluditos

Caro
01-07-2008, 04:14:46
¿Se puede hacer que el usuario no pueda darle el nombre al archivo?

Con el componente SaveDialog el usuario si podra darle el nombre de archivo, lo que puedes hacer es extraer la ruta sin el nombre de archivo del FileName, pero talvez sería mejor que lo hagas de la forma que te indico arriba.


if SaveDialog1.Execute then
begin
showmessage(ExtractFileDir(SaveDialog1.FileName));
end;


Saluditos

jarr-o
02-07-2008, 00:01:18
Gracias por sus respuestas en esta ocasion al final he utilizado selectdirectory
Nos vemos la proxima