| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Mie 09 Nov, 2005 2:10 pm Asunto: guardar un archivo |
|
|
| Necesito que me digan algo... hay veces que cuando utilizo el TOpendialog y luego voy a guardar un archivo cualquiera por medio de las funciones fprintf, me lo guarda en el directorio donde abri algo con el TOpendialog. Como hago para que siempre me lo guarde en el directorio principal del programa??? |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 09 Nov, 2005 3:19 pm Asunto: |
|
|
| Código: |
AnsiString ruta_guardado = ExtractFilePath(Application->ExeName)+"tu_archivo.txt";
|
Con lo anterior el archivo llamado tu_archivo.txt se guarda siempre en el directorio de la aplicación. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Mie 09 Nov, 2005 5:06 pm Asunto: |
|
|
hey gracias... pero que hago con ese AnsiString??? donde lo pego...
el problema es que yo utilizo asi:
file=fopen("archivo.txt","w"); en vez de w puede ser a
fprint(lo que sea);
fclose(file);
y luego el archivo.txt me no me lo manda al directorio principal del programa, sino donde yo abri la ultima vez en TOpendialog...
si no es mucha molestia dimelo como si fuese un dummie (QUE NO LO SOY!!!!) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 09 Nov, 2005 9:19 pm Asunto: |
|
|
bien, en vista de las cosas como se ven, nunca vas a poder guardar el archivo que habres en el directorio principal de tu programa, ya que siempre va a ser en el lugar de donde lo habres..
por algo tan sencillo como lo que estas haciendo
| Código: | file=fopen("archivo.txt","w"); en vez de w puede ser a
fprint(lo que sea);
fclose(file); |
pero si explicas con detalle se te puede ayudar
| Código: | un ejemplo de solucion puede ser
FILE file;
if(OpenDialog1->Execute())
{
AnsiString Archivo = OpenDialog1->FileName;
// por ende file, es un puntero a un archivo
// y ese puntero, esta direccionando al nombre y ruta
// donde estas habriendo el archivo
file=fopen(Archivo.c_str(),"w");
// opciones a realizar dentro del archivo//
fclose(file);
// una forma de hacerlo seria copiar el archivo original
// en el directorio de tu aplicacion.
AnsiString Ruta_Local = ExtractFilePath(Application->ExeName);
AnsiString Nombre_Arch= ExtractFileName(OpenDialog1->FileName);
::CopyFile(Archivo.c_str(),(Ruta_Local+Nombre_Arch).c_str(),false);
} |
_________________
 |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Vie 11 Nov, 2005 10:37 pm Asunto: |
|
|
Les explico de nuevo... yo abro un archivo con FOPEN en el directorio principal del donde se encuentra mi programa. Luego abro otro archivo con un TOpenDialog y hago lo que sea con el archivo en el programa. Despues cuando utilizo FPRINTF para guardar algo, el programa me lo guarda en el directorio donde carge el archivo con el TOpenDialog... ESE ES EL PROBLEMA!!!... QUE YO QUIERO QUE ME LO GUERDE EN EL DIRECTORIO PRINCIPAL!!!!
si no me pueden ayudar, entonces diganme como guardar un archivo .txt en la carpeta que yo quiera sin utilizar un TSaveDialog. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 12 Nov, 2005 2:46 am Asunto: |
|
|
Mira lo pongo de la siguiente manera
1.- evita el uso de mayusculas dentro de los mensajes por que pareciera que nos estas GRITANDO!!
2.- en que parte de tu codigo habres el archivo y en que parte de tu codigo guardas el archivo.
3.- al grabar pasas la ruta? o solo se te antoja crear el archivo..
pd: por respeto a los demas integrantes del foro, trata de explicar lo que quieres hacer,
4 y ultima, por que combinas las sentencias de la VCL de C++ con las sentencias propias de "C", si no quieres usar el TOpenDialog o el TSaveDialog, por que forzas a usar el fopen y fclose
y por ultimo la respuesta esta en ExtractFilePath(), pero al ser tan hermetico en tu codigo y no mostrarlo, pues NADIE!! te va indicar donde lo pongas
| Cita: | si no es mucha molestia dimelo como si fuese un dummie (QUE NO LO
SOY!!!!) |
si no lo eres, no te comportes como tal...
| Cita: | | si no me pueden ayudar, entonces diganme como guardar un archivo .txt en la carpeta que yo quiera sin utilizar un TSaveDialog. |
sobre esto ultimo
1.- se te ha dado la solucion con el ExtractFilePath()
2.- que estes cerrado y no quieras ver el lugar donde debes ponerlo, eso es otra cosa..
3.- si no te gusta el TSaveDialog crea uno derivado de este, dentro del foro existen varios ejemplos para crear tu propio componente.
un saludo..
no estoy siendo descortes ni grosero, simplemente,
"En la Forma de Pedir, Se encuentra el Dar" _________________
 |
|
| Volver arriba |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Sab 12 Nov, 2005 3:43 pm Asunto: disculpas... |
|
|
Cesar, disculpame. Yo no queria ofernderlos, ademas, pienso que ofender a alguien de este foro seria un irrespetar a personas a las que admiro por saber algo que a mi me interesa. Pienso que aqui hay dioses en lo que concierne a C++... ojala yo pudiese ser como alguno de ellos.
Lo que intentaba decir en MAYUSCULAS era que estaba apurado y no rabioso o algo por el estilo... pero de todas formas disculpas...
Si puedes seguir ayudandome te lo agradezco, es mas, estaba pensando en mandarte el programa y que tu lo miraras a ver que pasa, pero de pronto estas muy ocupado o algo asi...
GRACIAS!!!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 12 Nov, 2005 6:10 pm Asunto: |
|
|
Puedes enviarlo, veremos que esta pasando..
Saludos... _________________
 |
|
| Volver arriba |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Mar 15 Nov, 2005 12:57 am Asunto: Guardar un Archivo |
|
|
Hola revisando este tema pues me parece que hay un problemita ya que cuando usas no solo Tu programa si no cualquier otro pasa lo siguiente:
* Para abrir un documento cualquiera pues este se abre en la carpeta por defecto que lo hicieron que aparesca (En la mayoria de los casos en la carpeta del programa que estamos usando...)
* Ahora cuando grabamos dicho documento en otra direccion diferente pues, como por arte de magia para la siguiente vez que queremos abrir un nuevo documento pues nos sale en la direccion que guardamos nuestro documento, supongo porque esta direccion se almacena en algun lugar de la memoria y este se vuelve por defecto para guardar o abrir cualquier otro documento
Pues bien con lo ya explicado tengo una solucion que lo podrias modificar según te paresca:
Partimos de tu codigo
| Código: | file=fopen("archivo.txt","w"); en vez de w puede ser a
fprint(lo que sea);
fclose(file); |
y lo modificamos de la siguiente manera:
| Código: |
file=fopen("archivo.txt","w"); // aqui tu lo guardas con la direccion por defecto
//pero si modificamos ahora tendremos las siguientes linea:
AnsiString RutaApp = ExtractFilePath(Application->ExeName);
char RutaNombre[50];
strcpy(RutaNombre, RutaApp.c_str();
strcat(RutaNombre, "archivo.txt");
file = fopen(RutaNombre, "w");
fprint(lo que sea);
fclose(file); |
Otra opcion seria esta te la dio Tugui pero creo que no lo interpretaste bien y este seria:
| Código: |
AnsiString RutaNombre = ExtractFilePath(Application->ExeName) + "archivo.txt";
file = fopen(RutaNombre.c_str(), "w");
fprint(lo que sea);
fclose(file);
|
Espero haberte ayudado, y recuerda que para el anterior codigo tienes que incorporar la libreria #include <string.h> que es donde estan las funciones para el manejo de cadenas, strcpy por ejemplo.
y tambien creo que es importante que sepas que:
fopen(char *, Modo de apertura char);
Por eso colocamos RutaNombre.c_str(); porque esta funcion me devuelve un puntero a caracteres (char *) de un AnsiString.
En pocas palabras convierte de AnsiString ---> char *
Bueno de nuevo espero haberte ayudado
Tu amigo:
 |
|
| Volver arriba |
|
 |
|