:GMS: Hola, estoy trabajando un sencillo programa, y en éste tengo la opción de guardar una string en un archivo de texto. Y tengo un script pasa eso:
[gml]
extt = argument0;
sv = argument1;
cont = argument2;
svl = string_length(sv);
lngt = string_length(extt);

var extension,largo;
largo=string_length(sv);
if largo<6
   sv+=extt;//se ingresó un nombre muy corto que no puede terminar en .txty hay que agregárselo
else
    {
    extension=string_copy(sv,largo-4,5);//últimos 5 caracteres del nombre
    if extension!=extt
        sv+=extt;
    }

ini_open(sv);
ini_write_string("a","b",cont);
ini_close();

fname = file_text_open_write(sv);
file_text_write_string(fname,cont);
file_text_close(fname);

if file_exists(sv)
show_message("Texto guardado como archivo en "+sv+" exitosamente");
else
show_message("Ha ocurrido un error al intentar guardar el texto como archivo en "+sv+". Inténtelo de nuevo más tarde")
[/gml]

y ejecuto el script así:

[gml]
if mouse_check_button(mb_right)
{
   dirr = get_save_filename("Archivo de texto","");
   save_file(".txt",dirr,STRING);
}
[/gml]

Pero simplemente no me crea el archivo. Leo en el cuadro de compilación y me encuentro con esto:

Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt'
Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt'
Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt


¿Qué puedo hacer?, no veo donde está el error, y he usado este código sin problemas en muchas ocaciones.
alaberga regué el café.

BA:STFW&RTFM

#1 Noviembre 21, 2015, 04:12:48 AM Ultima modificación: Noviembre 21, 2015, 06:56:20 AM por penumbra
Cita de: NiuWeb en Noviembre 21, 2015, 03:14:58 AM
¿Qué puedo hacer?, no veo donde está el error, y he usado este código sin problemas en muchas ocaciones.
Qué valor tiene la variable working directory? Intenta usarla para guardar el archivo.

1-svl y largo son LO MISMO jeje
2-no entiendo por qué verificas la longitud para que le agregue la extensión... no sería mejor que la pusieras tú directamente y el usuario solo tenga que poner un nombre?
3-no entiendo qué tratas de hacer sry xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Cita de: NiuWeb en Noviembre 21, 2015, 03:14:58 AM
:GMS: Hola, estoy trabajando un sencillo programa, y en éste tengo la opción de guardar una string en un archivo de texto. Y tengo un script pasa eso:
[gml]
extt = argument0;
sv = argument1;
cont = argument2;
svl = string_length(sv);
lngt = string_length(extt);

var extension,largo;
largo=string_length(sv);
if largo<6
   sv+=extt;//se ingresó un nombre muy corto que no puede terminar en .txty hay que agregárselo
else
    {
    extension=string_copy(sv,largo-4,5);//últimos 5 caracteres del nombre
    if extension!=extt
        sv+=extt;
    }

ini_open(sv);
ini_write_string("a","b",cont);
ini_close();

fname = file_text_open_write(sv);
file_text_write_string(fname,cont);
file_text_close(fname);

if file_exists(sv)
show_message("Texto guardado como archivo en "+sv+" exitosamente");
else
show_message("Ha ocurrido un error al intentar guardar el texto como archivo en "+sv+". Inténtelo de nuevo más tarde")
[/gml]

y ejecuto el script así:

[gml]
if mouse_check_button(mb_right)
{
   dirr = get_save_filename("Archivo de texto","");
   save_file(".txt",dirr,STRING);
}
[/gml]

Pero simplemente no me crea el archivo. Leo en el cuadro de compilación y me encuentro con esto:

Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt'
Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt'
Error! not allowing save with filename 'C:\Users\usuario\Desktop\texto.txt


¿Qué puedo hacer?, no veo donde está el error, y he usado este código sin problemas en muchas ocaciones.

Tengo que decirte que tu código es desastroso. Suposición que no has dejado en claro: save_file es el nombre del script cuyo código está al principio de tu pregunta (no es obvio pero se intuye).

No corresponde indicar en el tipo de archivo de la función get_save_filename algo como "archivo de texto", sino que algo como "*.txt" ya que es la extensión lo que se indica ahí. Si vas a leer el archivo como ini, debieras proponerle al usuario una extensión .ini en vez de txt. Olvídate de preguntarle al usuario dónde quiere guardar un archivo, ya que por ser GMS sandbox no te va a dejar guardar nada fuera de la save area.



#4 Noviembre 21, 2015, 10:45:29 AM Ultima modificación: Noviembre 21, 2015, 10:55:19 AM por penumbra
Cita de: Guacusio en Noviembre 21, 2015, 10:06:12 AM
Olvídate de preguntarle al usuario dónde quiere guardar un archivo, ya que por ser GMS sandbox no te va a dejar guardar nada fuera de la save area.
Es cierto que el código está mal implementado (no lo quería mencionar  XD) pero hay dos excepciones a la regla del sandbox:

En windows y en mac es posible saltarse el sandbox, con la restricción de que el usuario debe elegir, mediante el cuadro de diálogo correspondiente, la nueva ubicación de guardado (o de lectura). Esto lo explica el manual:
CitarOn the Windows platform there is one way to save and load files from outside of the sandbox and that is using the functions get_open_filename and get_save_filename. Both of these functions will require that the user select an area for loading and saving and the return string can then be used in the rest of the file functions to bypass the sandbox.


hmmm, alguien me explica qué es eso del sandbox? :S

niu, puedes poner la extensión que te plazca, txt también sirve aun siendo ini, como si pones .holaketal funcionará exactamente igual y queda más pro :B
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Cita de: penumbra en Noviembre 21, 2015, 10:45:29 AM
Cita de: Guacusio en Noviembre 21, 2015, 10:06:12 AM
Olvídate de preguntarle al usuario dónde quiere guardar un archivo, ya que por ser GMS sandbox no te va a dejar guardar nada fuera de la save area.
Es cierto que el código está mal implementado (no lo quería mencionar  XD) pero hay dos excepciones a la regla del sandbox:

En windows y en mac es posible saltarse el sandbox, con la restricción de que el usuario debe elegir, mediante el cuadro de diálogo correspondiente, la nueva ubicación de guardado (o de lectura). Esto lo explica el manual:
CitarOn the Windows platform there is one way to save and load files from outside of the sandbox and that is using the functions get_open_filename and get_save_filename. Both of these functions will require that the user select an area for loading and saving and the return string can then be used in the rest of the file functions to bypass the sandbox.

Es cierto. Para mi es un misterio cómo es que GMS detecta que el string con una ruta fue definido mediante get_save_filename (para permitir una escritura fuera de la save area), mientras que tratar de escribir entregando directamente la ruta no funciona, siendo que ambas rutas son strings idénticos.