我如何创建一个连接在Windows Vista?
-
10-07-2019 - |
题
我找到创建的链接(软链接),从Java在Windows Vista/2008机。我很高兴有这个想法,我需要叫出来的JNI做到这一点。我后帮助在实际C码虽然。什么是适当的系统创建的链路?指针一些很好的文件在这个问题上将非常赞赏。
解决方案
在Windows符号链接使用 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#例子:
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或看看地图书馆自独立/jpython(对不起我不能看看它atm作为我的网络连接古怪).我似乎回想一下,继续写了一个图书馆,将各种posix api入java(认为像chown所需的红宝石的遵守,但没有交叉平台)。这个图书馆,正在使用的jpython人似乎非常高兴地有它。我会惊讶如果这种图书馆不提供sym链接的支持。
你不能只是喊在命令行和使用 mklink
不隶属于 StackOverflow