문제

Windows Vista/ 2008 시스템에서 Java에서 Symlinks (Soft Links)를 만들려고합니다. 나는 이것을하기 위해 JNI에 전화해야한다는 생각에 만족합니다. 그래도 실제 C 코드에 대한 도움을받습니다. 링크를 만들기위한 적절한 시스템 호출은 무엇입니까? 이 주제에 대한 좋은 문서에 대한 지침은 대단히 감사 할 것입니다.

도움이 되었습니까?

해결책

Windows의 기호 링크는 The를 사용하여 작성됩니다 CreateSymbolicLink API 기능, 이는 매개 변수가 mklink 명령 줄 유틸리티.

JNI 및 Win32 SDK 헤더를 올바르게 참조한다고 가정하면 코드가 간단 할 수 있습니다.

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;
}

이것은 내 머리 꼭대기에서 벗어 났고, 나는 나이에 JNI를 다루지 않았 으므로이 작업을 만드는 데있어 더 좋은 점을 간과했을 것입니다 ...

다른 팁

이것은 내 노트에서 시도해 볼 내 목록에 있습니다.

API :

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

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

일부 C# 예제 :

http://community.bartdesmet.net/blogs/bart/archive/2006/10/24/windows-vista-2d00-creating-symbolic-links-with-c_2300_.aspx

C ++ 예, 이것은 내가 읽은 다른 기사의 CNP입니다. 테스트하지 않았으므로주의해서 사용하십시오.

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.");
  }
}

}

이것을 말하면서, 나는이 코드를 사용하지 않을 것입니다 :-) 나는 jruby/jpython에서 mklink를 포크하거나 기본 라이브러리를 보는 경향이 있습니다 (네트워크 연결이 칙칙하기 때문에 ATM을 찾을 수 없습니다). Jruby가 다양한 POSIX API를 Java로 마무리하는 도서관을 작성했음을 기억하는 것 같습니다 (Ruby 준수에 필요한 Chown과 같은 생각이지만 크로스 플랫폼은 아닙니다). 이 라이브러리는 매우 만족하는 Jpython 사람들이 사용하고 있습니다. 이 라이브러리가 Sym Link 지원을 제공하지 않으면 놀랄 것입니다.

명령 줄을 호출하고 사용할 수 없습니까? mklink?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top