我期待在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