我期待在Windows Vista/2008計算機上從Java創建符號鏈接(軟鏈接)。我很高興這個想法,我需要致電JNI來做到這一點。儘管我在實際C代碼的幫助後。什麼是適當的系統調用來創建鏈接?指向這個問題的一些很好的文檔將非常感激。如何在Windows Vista中創建符號鏈接?
5
A
回答
10
Windows中的符號鏈接是使用CreateSymbolicLink API Function創建的,它的參數與the Mklink command line utility接受的命令行參數非常相似。
假設你正確地引用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,所以我可能忽略了使這項工作的一些細節點...
3
難道你只是打電話到命令行並使用mklink?
4
這一直是我的名單上的嘗試,從我的筆記:
的API:
http://msdn.microsoft.com/en-us/library/aa363866(VS.85).aspx
一些C#示例:
一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.");
}
}
}
話雖如此,我也不會用這個代碼:-)我要麼傾向於叉mklink或從JRuby中/ JPython的本地庫查找(對不起,我不能看它atm作爲我的網絡連接是flakey)。我似乎記得,jruby編寫了一個庫,將各種posix apis封裝到java中(認爲它是ruby遵從性所需的chown,但不是跨平臺)。這個庫正在被看起來非常滿意的jpython人使用。如果這個庫不提供sym鏈接支持,我會感到驚訝。
相關問題
- 1. 使用c#,如何複製Windows Vista中的符號鏈接,7,2008
- 2. 如何創建PHPUnit的符號鏈接?
- 3. 創建符號鏈接
- 4. 如何在python中創建zipfile中的符號鏈接
- 5. 如何在輸出.tar.gz文件中創建符號鏈接?
- 6. 如何使用fs api在phantomjs中創建符號鏈接?
- 7. 如何在FUSE中創建符號鏈接?
- 8. 如何在www目錄中創建符號鏈接?
- 9. JVM運行時在Windows上創建一個符號鏈接
- 10. 創建符號鏈接以及如何在EngineYard中創建它的重要性
- 11. 創建沒有符號鏈接的virtualenv
- 12. 無法創建符號鏈接
- 13. 創建文件夾的符號鏈接
- 14. Rsync只創建符號鏈接
- 15. 創建符號鏈接或硬鏈接在XP的Fat32
- 16. 如何爲不存在的文件夾創建符號鏈接?
- 17. 符號鏈接限制 - Windows
- 18. 無法創建符號鏈接
- 19. Android init.rc:無法創建符號鏈接
- 20. 創建符號鏈接到程序
- 21. 如何在Windows 7中使用cygwin進行符號鏈接
- 22. Windows XP中的符號鏈接
- 23. Windows中的PHP和符號鏈接
- 24. 如何創建相對符號鏈接PowerShell的方式?
- 25. 如何使用SCons創建符號鏈接?
- 26. 如何使用Perl創建符號鏈接?
- 27. 混帳不存儲符號鏈接作爲符號鏈接在Windows
- 28. 如何在Windows窗體應用程序中創建mailto鏈接
- 29. 在SVN中創建分支的符號鏈接?
- 30. 在intellij項目中創建符號鏈接
不!我希望直接使用適當的C/C++調用。 – 2008-10-13 12:30:41
夠公平的。有什麼具體的原因嗎?我的意思是,您需要的功能是否通過mklink或類似功能無法使用? – 2008-10-13 12:36:35