[Tutorial] Funciones de archivos.
#1

Hola.

En este tutorial estoy decidido a explicarle el uso de las funciones de los archivos. Con ellos se pueden hacer muchas cosas, y aprenderlo es muy ъtil. Por ejemplo, usarlos y adaptarlos a tu GM para cargar datos para el jugador, que es mucho mбs fбcil y mбs rбpido que usar cualquier otro .inc.

  • fopen
Esta funciуn abre un archivo para editarlo/leerlo, tambiйn sirve para crearlo si no existe. Ej:

pawn Код:
public OnGameModeInit()
{
    if(!fexist("Test.txt")) // Verificamos que en 'scriptfiles' no existe el archivo 'Test' con la extensiуn 'txt'.
    {
        // Recuerden que deben aсadirle el tag 'File'.
        new File:INI = fopen("Test.txt", io_write); // Abrimos el archivo 'Test.txt'. Como en este caso no existe, se crearб.
        fwrite(INI, "Password = Tutorial\r\n"); // El '\r\n' es para escribir una nueva lнnea en el archivo.
        fclose(INI); // Cerramos el archivo.
    }
    return 1;
}

Tengan en cuenta que esto tiene 4 modos de usarlo, los cuales son:
  • io_read - Abrirб el archivo para leer su contenido.
  • io_write - Abrirб el archivo para escribir algo en йl. Tambiйn borrarб todo lo que tiene adentro (lo deja vacнo)
  • io_readwrite - Lee el archivo o lo crea.
  • io_append - Esto abrirб el archivo para escribir algo en йl, pero no dejarб vacнo al archivo, sino que seguirб escribiendo en йl.
  • io_read
Para leer una lнnea o muchas de un archivo, debemos guardarla en una variable. Ejemplo:

pawn Код:
// Supondremos que en el archivo 'Test.txt', la primera lнnea es: Password = Tutorial\r\n
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI) // Como 'fopen' devuelve '1' si el archivo abriу exitosamente, aquн verificaremos que lo hizo (en caso contrario devuelve '0').
    {
        new save[27]; // Estas variable almacenarб toda la lнnea.
        fread(INI, string); // Luego explicarй sobre 'fread' - Ahora la variable 'save' serб 'Password = Tutorial\r\n'.
        printf("* INI: %s", string);
        // En la consola dirб: * INI: Password = Tutorial
    }
    return 1;
}

  • io_write
Recuerden que esto borrarб todo lo que tenga el archivo - Esto es usado para abrir el archivo y escribir algo en йl con 'fwrite':

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_write); // Al hacer esto, 'Password = Tutorial\r\n' serб borrado del archivo.
    if(INI)
    {
        fwrite(INI, "Password = Tutorial\r\n");
        fwrite(INI, "IP = 255.255.255\r\n");
        // No es necesario aсadir '\r\n' a la ъltima lнnea del archivo.
        fclose(INI);
    }
    return 1;
}
Ahora en nuestro archivo:

Код:
Password = Tutorial
IP = 255.255.255
  • io_append
Como bien sabemos, en nuestro archivo tenemos:

Код:
Password = Tutorial
IP = 255.255.255
Ahora escribiremos algo mбs en йl:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_append); // Abrirб la ъltima lнnea del archivo para escribir en ella.
    if(INI)
    {
        fwrite("AdminLevel ="); // En el archivo: AdminLevel =
        fwrite(" 10"); // Aquн seguiremos escribiendo en la lнnea que estб posicionado el fichero en el archivo.
        fclose(INI);
    }
    return 1;
}
Y en nuestro archivo encontraremos:

Код:
Password = Tutorial
IP = 255.255.255
AdminLevel = 10
  • fread
Esto lee una lнnea de un archivo y lo almacena en una cadena. Un ejemplo:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[3][27];
        fread(INI, string[0], 28); // Leemos la primera lнnea del archivo - 'save[0]' ahora es: Password = Tutorial\r\n - El '28' (tercer argumento/parбmetro) hace referencia a la cantidad de bytes que se leerб en la lнnea.
        fread(INI, string[1]); // Leemos la segunda lнnea del archivo - 'save[1]' ahora es: IP = 255.255.255\r\n
        fread(INI, string[2]); // Leemos la segunda lнnea del archivo - 'save[2]' ahora es: AdminLevel = 10
        fclose(INI);
    }
    return 1;
}


  • fwrite
No hay mucho para explicar, pues ya lo he hecho anteriormente. Aunque, tengan en cuenta que si intentan escribir en una direcciуn que no es vбlida, el servidor se crashearб.


  • fremove
Elimina un archivo segъn la ruta que especifiquemos. Tengan en cuenta que la ruta debe ser vбlida.
Esta funciуn devuelve '1' si el archivo se borrу correctamente, caso contrario devuelve '0' si la ruta es invбlida o no tiene permisos para borrar dicho archivo.


  • fseek
Esto da un 'salto' de lнneas en el archivo.
Esta funciуn tiene 3 modos, los cuales son:
  • seek_start - Ajustar el fichero desde el principio del archivo.
  • seek_current -Ajustar el fichero desde la posiciуn actual que se estб leyendo en el archivo.
  • seek_end - Ajustar el fichero al final del archivo.
Para mбs explicaciуn, veamos el siguiente ejemplo:


pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[11];
        fseek(INI, 11, seek_start); // Posicionamos el fichero al caracter nъmero '11' de la prнmera lнnea. En este caso: (vean la imagen de abajo).
        fread(INI, string); // Aquн leera toda la lнnea desde en donde posicionamos el fichero.
        fclose(INI);
    }
    return 1;
}
Imagen:


(palito negro = fichero).

En nuestra cadena almacenada encontraremos:

Код:
Tutorial\r\n
Si queremos quitar el '\r\n', bastarб con hacer esto:


pawn Код:
string[strlen(string)] = '\0'; // '\0' es para vaciar el carбcter - Limpiarб el ъltimo.
string[strlen(string)-1] = '\0'; // Limpiarб el ante-ъltimo.

// '\r' o '\n' ocupan un carбcter.

Y ahora la cadena serб:
Код:
Tutorial
Para leer lнnea por lнnea, usamos 'fread'. Ejemplo:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[11];
        fread(INI, string); // Leemos la primera lнnea.
        fread(INI, string); // Pasamos a la segunda lнnea.
        fseek(INI, 13, seek_current); // Ahora el fichero estarб posicionado aquн: (vean la imagen de abajo).
        fclose(INI);
    }
    return 1;
}
Imagen:




  • Editar y guardar.
Para editar una lнnea y guardarla, debemos hacer algo como esto:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read); // Abrimos el archivo para leerlo.
    if(INI)
    {
        new string[3][27];
        fread(INI, string[0]); // Leemos la primera lнnea y guardamos su valor.
        fread(INI, string[1]); // Pasamos a la segunda lнnea, la leemos y la guardamos.
        fread(INI, string[2]); // Pasamos a la tercer lнnea, la leemos y la guardamos.
        fclose(INI); // Aquн lo cerramos para volverlo a abrir, pero esta vez para escribir en йl.
       
        strdel(string[1], 0, 27); // Vaciamos toda la cadena.
        strins(string[1], "IP = 126.124.1.21\r\n", 0)// Ahora la cadena 'string[1]' serб: IP = 126.124.1.21\r\n
       
        INI = fopen("Test.txt", io_write); // Ahora escribiremos la informaciуn guardada.
        fwrite(INI, string[0]);
        fwrite(INI, string[1]);
        fwrite(INI, string[2]);
        fclose(INI);
    }
    return 1;
}

Y en nuestro archivo encontraremos:

Код:
Password = Tutorial
IP = 126.124.1.21
AdminLevel = 10

Bueno, creo que he explicado lo necesario como para entender. He tratado de resumirlo lo mas posible, asн que si encuentran algъn error o tienen alguna duda, estoy a su disposiciуn .
Reply


Messages In This Thread
Funciones de archivos. - by Swedky - 06.05.2014, 18:10
Respuesta: Funciones de archivos. - by DesingMyCry - 06.05.2014, 19:43
Respuesta: Funciones de archivos. - by juandiegox - 06.05.2014, 22:45
Respuesta: Funciones de archivos. - by Swedky - 07.05.2014, 02:53
Respuesta: Funciones de archivos. - by BecksLennon - 07.05.2014, 09:34
Respuesta: Funciones de archivos. - by Daniel_Ruiz - 07.05.2014, 15:14
Respuesta: Funciones de archivos. - by OTACON - 08.05.2014, 15:33
Respuesta: Funciones de archivos. - by Swedky - 08.05.2014, 15:39
Respuesta: Funciones de archivos. - by OTACON - 08.05.2014, 15:46
Respuesta: Funciones de archivos. - by JustBored - 08.05.2014, 15:57

Forum Jump:


Users browsing this thread: 1 Guest(s)