gpt4 book ai didi

c - 如何检查与网络驱动器的连接?

转载 作者:可可西里 更新时间:2023-11-01 14:18:45 29 4
gpt4 key购买 nike

我有一个应用程序使用 WNetAddConnection2() 在我的网络驱动器上长期创建/写入文件。

    NETRESOURCE nr = {0,};
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = nullptr;
nr.lpRemoteName = L"\\\\MyNetworkDrive\\MyFolder\\";
nr.lpProvider = nullptr;

DWORD ret = WNetAddConnection2 (&nr, L"MyPW", L"MyID", CONNECT_UPDATE_PROFILE); //add connection

// A few seconds needed to invoke StartWritingFiles();

StartWritingFiles();

但是 WNetAddConnection2 似乎需要如此繁重的工作才能返回,这让应用程序看起来很僵硬。

所以我想我可以避免在与 MyNetworkDrive 的连接处于事件状态时调用它

我应该寻找哪个 API 来解决这个问题?

提前致谢。

最佳答案

上面的评论是正确的。网络内容不应在 UI 线程上完成。但是,如果您不想线程,我相信您想枚举所有打开的连接以查看您想要的资源是否已连接。像这样尝试 WNetOpenEnum:

#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <Winnetwk.h>
#include <stdio.h>

#pragma comment(lib,"Mpr.lib")

VOID main(){

HANDLE hEnum = (HANDLE)0;

DWORD dwError = WNetOpenEnum(RESOURCE_CONNECTED,RESOURCETYPE_DISK,0,NULL,&hEnum);

if (dwError == NO_ERROR){

DWORD dwCount = -1;

CHAR szBuff[1000];

ZeroMemory(szBuff,sizeof(szBuff));

DWORD dwSize = sizeof(szBuff);

dwError = WNetEnumResource(hEnum,&dwCount,szBuff,&dwSize);

if (dwError == NO_ERROR){

NETRESOURCE *pnr = (NETRESOURCE*)szBuff;

for (DWORD d = 0; d < dwCount; d++){

if (pnr[d].lpRemoteName){

printf("%s\n",pnr[d].lpRemoteName);

}

}

}

WNetCloseEnum(hEnum);

}else{

printf("Failed: %u\n",dwError);

}

}

这有点老套,因为我假设所有连接都在 1000 字节之内。您可以在此处阅读有关函数 WNetOpenEnum 和相关内容的信息:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa385478%28v=vs.85%29.aspx

关于c - 如何检查与网络驱动器的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306157/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com