Un saludo amigos!  :)

Continuando con un tema anterior:

https://www.comunidadgm.org/preguntas-y-respuestas/cambio-de-directorio/msg126569/#msg126569

se dice que usando get_save_filename() y get_open_filename() podemos cambiar la ruta de guardado de algunos archivos, sin embargo no se como utilizar estas funciones, si alguien sabe como funciona y como puedo obtener un cambio de directorio se lo agradeceria

Saludos Alemar5

Te puedo indicar como funciona el "get_open_filename()", esa funcion solo sirve para seleccionar un archivo que se encuentra en tu disco duro, por lo que no hay una ruta definida en la que buscar los archivos.
[gml]
/// Event Create
file = get_open_filename("Selecciona una imagen de tu dico duro |.png|.jpg|.bmp", "")
sprite = sprite_add(file, 0, 0, 0, 0, 0);

/// Event Draw
draw_text(32, 32, "Ruta del sprite seleccionado: "+file)
draw_sprite(sprite, 0, 48, 32)
[/gml]
Puedes usar ese codigo para probar la funcion. Ahora creo que para la funcion de get_save_filename() necesitas tener algun archivo en la pestaña de include_files (nose si esa pestaña exista en versiones posteriores a GM8)

Saludos Alemar5  :).

Basicamente mi compañero T789 te ha explicado como funciona el get_open_filename. Pero si lo que quieres es que el usuario guarde, por ejemplo, una captura de pantalla dondr el quiera deberias hacer esto.

Create:
[gml] //Creamos una variable la cual hara que el usuario busque la ubicación donde guardar la foto.
var foto
foto = get_save_filename("screenshot|. png", ""
//Luego, si la variable no da vacia tira la screenshot y la guarda donde lo quiso el usuario.
if not !foto {screen_save(foto)} [/gml]

Espero que te ayude lo que puse, la verdad no sabia si era eso :-[
OmarMakero

OmarMakero buena sugerencia, pero no deberia ser
[gml]
if !foto
[/gml]
Sino:
[gml]
if (foto != "") screen_save(foto);
[/gml]
Pues esas funciones solo devuelven cadenas

Cita de: T789 en Enero 19, 2021, 03:24:56 PM
OmarMakero buena sugerencia, pero no deberia ser
[gml]
if !foto
[/gml]
Sino:
[gml]
if (foto != "") screen_save(foto);
[/gml]
Pues esas funciones solo devuelven cadenas

Gracias por corregirme T789, es que andaba en movil y se me habia olvidado ese punto.  :-[
OmarMakero

Muchas gracias a ambos, son todos unos genios :3

ya probe el codigo y me devuelve una ventana para guardar el archivo, sin embargo existiría una manera de guardar el archivo automáticamente en una carpeta determinada?

Digamos, que automáticamente guarde la imagen en c:/Administrador/Desktop, no es necesario que cuando se guarde el archivo sea tan visual, si no mas bien como un proceso en segundo plano...

Igual gracias por la ayuda chicos :3

Ah ok, si lo que quieres es que se guarde automaticamente en esa direccion haz esto:

Create:
[gml]
//Creas la variable de la direccion.
var directorio
directorio = C:/Users/admin/Desktop.[/gml]
Step:
//Si el juego ve que se preciona la tecla S, tira la foto y la guarda en el directorio
[gml]if keyboard_check_pressed(ord("S"))
{
screen_save(directorio + "screenshot.png")
};[/gml]

Ahora, asi sería si automaticamente quiere el programador (en este caso tu) poner la foto en esa ubicación, pero si lo que quieres es que el usuario lo haga deberias crear una variable con un "get_string" en la cual el ponga la ubicación y eso despues deberias hacer que se guarde en un archivo de texto externo, si es que el juego cuenta con sistema de guardado, si tienes alguna duda con eso me avisas para hacerte un ejemplo
OmarMakero

hola amigo, fijate que probe el codigo y no me lo reconocia con el "var", asi que se lo quite y de todas maneras me marcaba error, todo parecia ir bien pero en el debug me daba este error: Error! not allowing file operation with filename 'C:\Users\admin\Desktop.screenshot.png'.

pense que era por cuestion de que el directorio estaba mal escrito, pero coloque uno copiado directo de windows y me daba lo mismo, tambien puse el directorio como un texto colocandole el "" pero seguia sin correr, sin las comillas y con el var no funciona, alguna solucion?  :-[

Ya vi el problema, al final deberias poner una barra diagonal, asi deberias ponerlo:

[gml]directorio = "C:/Users/admin/Desktop/"[/gml]

Y lo demas mantenlo como está
OmarMakero

hmm, ya intente cambiar eso pero continua marcando error :/

create:

[gml]//Creas la variable de la direccion.
directorio = "C:\Users\Alemar5_2\Desktop\test\"[/gml]

step:

[gml]if keyboard_check_pressed(ord("S"))
{
screen_save(directorio + "screenshot.png")
};[/gml]

el error del debug: Error! not allowing file operation with filename 'C:\UsersAlemar5_2Desktop   est"screenshot.png'.

Dice que no lo permite, prueba ejecutar el GM como administrador
OmarMakero

Ya intente ejecutarlo como administrador pero continua marcando el error :c

no sera mas facil usar una extensión que cambie el directorio?

Vale, ya se porque es, lo que pasa es que el juego lo que está haciendo es poniendole el nombre de C:/Users/"Tu usuario"/Desktop/screenshot, el screenshot siempre se guardará en la carpeta donde está el juego, a no ser que crees una carpeta dentro del juego donde guardes las screenshots, ahi si deberia funcionar
OmarMakero

Podrias usar el primer ejemplo que te di y hacer lo siguiente:

1-Seleccionas un lugar donde guardar la captura
2-Ves en que manera esta puesta la ruta, pues recuerda que
[gml]
draw_text(32, 32, "Ruta del sprite seleccionado: "+file)
[/gml]
Ese pequeño testeo te indica en que ruta/directorio se guardo la captura y de esa misma forma podrias ver la ruta del directorio donde se guardo. Asi para la proxima solo tendrias que memorizarte esa ruta y utilizarla al guardar captura sin tener que salir ese apartado visual

Las funciones de archivos del GMS estan limitadas por el sandbox, lo que significa que solo puede leer archivos es sus carpetas raiz y temporal, y solo puede crear archivos en su carpeta temporal. El sandbox puede desactivarse en GMS 2, pero ciertas carpetas siguen siendo inaccesibles para escritura aún con el sandbox desactivado, especificamente la carpeta raiz y las carpetas de sistema.

Las funciones get_save_filename() y get_open_filename() otorgan respectivamente permiso de escritura y permiso de lectura para la ruta seleccionada, de esta manera se pueden manipular archivos fuera del sandbox sin desactivarlo, pero el permiso es temporal y caduca cuando se cierra el juego.

Tambien, en strings el GMS 2 usa la barra invertida (\) como caracter de escape, esto significa que si no encuentra un caracter perteneciente a una secuencia de escape seguido de la barra invertida la ignora, para usarla en una string debe usarse doble (\\) o indicar al GM que debe leer la string literalmente agregando un arroba (@) al inicio de la string:

directorio = "C:\\Users\\Alemar5_2\\Desktop\\test\\"
directorio = @"C:\Users\Alemar5_2\Desktop\test\"