C/Visual C - Función link() en MSVC

 
Vista:

Función link() en MSVC

Publicado por Federico (8 intervenciones) el 15/03/2003 05:46:35
Tengo un código de un programa que fue desarrollado en DJGPP y quiero pasarlo a MSVC. En él está la función link(), que me parece no existe en MSVC y que sirve para unir dos archivos. Existe alguna otra función que haga el trabajo, o me pueden mandar el código fuente de ésta función a mi e-mail ([email protected]) ya que no puedo bajar el archivo de 25 megas del código del GCC para DJGPP.

Muchas gracias
Federico
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Alternativa a la función `link()` de DJGPP en MSVC

Publicado por Alejandro (1153 intervenciones) el 09/05/2025 20:56:35
La función `link()` en DJGPP se utiliza para unir dos archivos, pero en MSVC no existe una función equivalente con el mismo nombre. Sin embargo, puedes lograr la misma funcionalidad utilizando otras funciones de la API de Windows o funciones estándar de C/C++.

Alternativa a `link()`



En MSVC, puedes usar la función `CreateFile()` para abrir archivos y `WriteFile()` para escribir en ellos. Aquí tienes un ejemplo de cómo podrías implementar una función que une dos archivos en uno nuevo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <windows.h>
#include <iostream>
 
bool linkFiles(const char* file1, const char* file2, const char* outputFile) {
    HANDLE hFile1 = CreateFile(file1, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    HANDLE hFile2 = CreateFile(file2, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    HANDLE hOutputFile = CreateFile(outputFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
 
    if (hFile1 == INVALID_HANDLE_VALUE || hFile2 == INVALID_HANDLE_VALUE || hOutputFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening files." << std::endl;
        return false;
    }
 
    char buffer[4096];
    DWORD bytesRead;
    DWORD bytesWritten;
 
    // Leer del primer archivo y escribir en el archivo de salida
    while (ReadFile(hFile1, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
        WriteFile(hOutputFile, buffer, bytesRead, &bytesWritten, NULL);
    }
 
    // Leer del segundo archivo y escribir en el archivo de salida
    while (ReadFile(hFile2, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
        WriteFile(hOutputFile, buffer, bytesRead, &bytesWritten, NULL);
    }
 
    // Cerrar los handles
    CloseHandle(hFile1);
    CloseHandle(hFile2);
    CloseHandle(hOutputFile);
 
    return true;
}
 
int main() {
    const char* file1 = "archivo1.txt";
    const char* file2 = "archivo2.txt";
    const char* outputFile = "archivo_unido.txt";
 
    if (linkFiles(file1, file2, outputFile)) {
        std::cout << "Archivos unidos exitosamente." << std::endl;
    } else {
        std::cout << "Error al unir los archivos." << std::endl;
    }
 
    return 0;
}

Explicación del código



1. `CreateFile`: Abre los archivos de entrada y crea el archivo de salida.
2. `ReadFile` y `WriteFile`: Lee datos de los archivos de entrada y los escribe en el archivo de salida en bloques.
3. Manejo de errores: Se verifica si los archivos se abren correctamente y se manejan errores en caso de que no se puedan abrir.
4. Cierre de handles: Se cierran los handles de los archivos después de que se completa la operación.

Conclusión



Este código proporciona una funcionalidad similar a la función `link()` de DJGPP, uniendo dos archivos en uno nuevo. Puedes adaptarlo según tus necesidades específicas.

¡Buena suerte con tu proyecto, Federico!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar