simbolico quitar enlace eliminar ejemplos crear archivo c++ c windows jni symlink

c++ - quitar - ¿Cómo creo un enlace simbólico en Windows Vista?



mklink/j ejemplos (3)

Estoy buscando crear enlaces simbólicos (enlaces suaves) desde Java en una máquina con Windows Vista / 2008. Estoy contento con la idea de que tengo que llamar al JNI para hacer esto. Sin embargo, estoy buscando ayuda con el código C real. ¿Cuál es la llamada al sistema apropiada para crear el enlace? Sugerencias para una buena documentación sobre este tema serían muy apreciadas.


¿No podrías llamar a la línea de comando y usar mklink ?


Esto ha estado en mi lista para intentarlo, según mis notas:

La API:

http://msdn.microsoft.com/en-us/library/aa363866(VS.85).aspx

BOOLEAN WINAPI CreateSymbolicLink( __in LPTSTR lpSymlinkFileName, __in LPTSTR lpTargetFileName, __in DWORD dwFlags );

Algunos ejemplos de C #:

http://community.bartdesmet.net/blogs/bart/archive/2006/10/24/Windows-Vista- 2D00 -Creación-enlaces simbólicos-con-C_2300_.aspx

Un ejemplo de C ++, esto es cnp de otro artículo que estaba leyendo. No lo he probado, así que úsalo con precaución.

typedef BOOL (WINAPI* CreateSymbolicLinkProc) (LPCSTR, LPCSTR, DWORD); void main(int argc, char *argv[]) { HMODULE h; CreateSymbolicLinkProc CreateSymbolicLink_func; LPCSTR link = argv[1]; LPCSTR target = argv[2]; DWORD flags = 0; h = LoadLibrary("kernel32"); CreateSymbolicLink_func = (CreateSymbolicLinkProc)GetProcAddress(h, if (CreateSymbolicLink_func == NULL) { fprintf(stderr, "CreateSymbolicLinkA not available/n"); } else { if ((*CreateSymbolicLink_func)(link, target, flags) == 0) { fprintf(stderr, "CreateSymbolicLink failed: %d/n", GetLastError()); } else { printf("Symbolic link created."); } }

}

Habiendo dicho esto, no usaría este código :-) Me inclinaría a tenedor mklink o miraría la biblioteca nativa de jruby / jpython (lo siento, no puedo buscarlo en cajero automático ya que mi conexión de red es escasa). Me parece recordar que jruby ha escrito una biblioteca que envuelve varios apis posix en java (piensa como chown que son necesarios para el cumplimiento de Ruby pero no son multiplataforma). Esta biblioteca está siendo utilizada por la gente de jpython que parece muy complacida con ella. Me sorprendería que esta biblioteca no ofrezca soporte de Sym Link.


Los enlaces simbólicos en Windows se crean utilizando la función CreateSymbolicLink API , que toma parámetros muy similares a los argumentos de línea de comandos aceptados por la utilidad de línea de comandos de Mklink .

Asumiendo que está haciendo referencia a los encabezados JNI y Win32 SDK correctamente, su código podría ser tan simple como:

JNIEXPORT jboolean JNICALL Java_ClassName_MethodName (JNIEnv *env, jstring symLinkName, jstring targetName) { const char *nativeSymLinkName = env->GetStringUTFChars(symLinkName, 0); const char *nativeTargetName = env->GetStringUTFChars(targetName, 0); jboolean success = (CreateSymbolicLink(nativeSymLinkName, nativeTargetName, 0) != 0); env->ReleaseStringUTFChars(symLinkName, nativeSymLinkName); env->ReleaseStringUTFChars(targetName, nativeTargetName); return success; }

Tenga en cuenta que esto está fuera de mi cabeza, y no he tratado con JNI en años, por lo que puede haber pasado por alto algunos de los puntos más finos de hacer de este trabajo ...