求助!!!!判断某文件在服务器上是否存在!!!!

ping66 2006-02-21 03:32:45
求助!!!!判断某文件在服务器上是否存在!!!!

代码到底该是如何呀!!!到底有没有人知道呀!!!!
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Friecin 2006-02-21
  • 打赏
  • 举报
回复
但往往上面的方法在实际应用中会有些问题,例如在win2000下的效果就比98下好,或者在文件出现问题后,也会出现延迟等待的显现。因此建议,先用ping命令(下面的代码)检查网络计算机是否存在,然后在使用 FileExists()函数:

自编Ping命令函数:
bool __fastcall Ping( AnsiString ip_address)
{
// ICMP.DLL laden:
HANDLE hIcmp = LoadLibrary("ICMP.DLL");
if(hIcmp == NULL)
{
return false;
}

// Zeiger auf die Funktionen besorgen:
PF_CMPCREATEFILE pfIcmpCreateFile = (PF_CMPCREATEFILE)
GetProcAddress(hIcmp, "IcmpCreateFile");
PF_ICMPCLOSEHANDLE pfIcmpCloseHandle = (PF_ICMPCLOSEHANDLE)
GetProcAddress(hIcmp,"IcmpCloseHandle");
PF_ICMPSENDECHO pfIcmpSendEcho = (PF_ICMPSENDECHO)
GetProcAddress(hIcmp,"IcmpSendEcho");

// Funktionszeiger prufen:
if (pfIcmpCreateFile == NULL || pfIcmpCloseHandle == NULL ||
pfIcmpSendEcho == NULL)
{
FreeLibrary(hIcmp);
return false;
}

// WinSock initialisieren
WSADATA wsaData;
int ilRetVal = WSAStartup(0x0101, &wsaData );
if(ilRetVal)
{
WSACleanup();
FreeLibrary(hIcmp);
return false;
}
// Check WinSock version
if(0x0101 != wsaData.wVersion)
{
WSACleanup();
FreeLibrary(hIcmp);
return false;
}

// Prufen, ob es sich bei der Zieladresse um IP-Adresse handelt und
// ggf. den die Adresse zum Namen ermitteln:
struct in_addr iaDest; // Struktur fur die Internet-Adresse
iaDest.s_addr = inet_addr(ip_address.c_str());
LPHOSTENT pHost; // Zeiger auf die Host Entry Struktur

if (iaDest.s_addr == INADDR_NONE)
pHost = gethostbyname(ip_address.c_str());
else
pHost = gethostbyaddr((BYTE *)&iaDest, sizeof(struct in_addr), AF_INET);

// 若該 ip 不能解析出主機名稱者
// 如 Router 或某些 Linux 主機 , 則回傳值仍是失敗 , 問題應出在這裡
// 但又不能拿掉 ....
if(pHost == NULL)
{
WSACleanup();
FreeLibrary(hIcmp);
return false;
}

// IP-Adresse kopieren
DWORD* pAddress = (DWORD*)(*pHost->h_addr_list);

// ICMP Echo Request Handle besorgen:
HANDLE hIcmpFile = pfIcmpCreateFile();

ICMPECHO icmpEcho; // ICMP-Echo Antwortbuffer
IPINFO ipInfo; // IP-Optionenstruktur

int ilTimeSum = 0; // Summe der Round Trip Time-Daten
int ilCount = 0; // Anzahl der Round Trip Time-Daten

for (int ilPingNo = 0; ilPingNo < 1; ilPingNo++)
{
// Default-Werte festlegen:
::ZeroMemory(&ipInfo, sizeof(ipInfo));
ipInfo.bTimeToLive = 255;
// ICMP Echo anfordern:
pfIcmpSendEcho(hIcmpFile, // Handle von IcmpCreateFile()
*pAddress, // Ziel-IP Addresse
NULL, // Zeiger auf den Buffer mit den
// zu sendenden Daten
0, // Buffergrosse in Bytes
&ipInfo, // Request-Optionen
&icmpEcho, // Antwort-Buffer
sizeof(struct tagICMPECHO), // Buffergrosse
5000); // Max. Wartezeit in Millisekunden

// Ergebnisse anzeigen:
iaDest.s_addr = icmpEcho.dwSource;

// falls Fehler aufgetreten:
if(icmpEcho.dwStatus)
{
break;
}
ilTimeSum += icmpEcho.dwRTTime;
ilCount++;
if(ilPingNo < 2) Sleep(200);
}

// Echo-Request File Handle schliessen:
pfIcmpCloseHandle(hIcmpFile);
// ICMP.DLL freigeben:
FreeLibrary(hIcmp);
// Winsock schliessen:
WSACleanup();

// Den Mittelwert aller Round Trip Times zuruckgeben:
//return ilRetVal = ilCount ? ilTimeSum/ilCount : -1;

//if (ilRetVal = ilCount)

ilRetVal = ilCount;
if( ilRetVal )
return true;
else
return false;

}
Friecin 2006-02-21
  • 打赏
  • 举报
回复
最简单的办法:
if( FileExists("\\SQL\Sheare\Hello.cpp" ) )
ShowMessage("存在");
else
ShowMessage("不存在");
scfox 2006-02-21
  • 打赏
  • 举报
回复
用ftp控件可以有相应的功能调用.

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧