C 中有一个 API 可以用来检查文件索引是打开还是关闭?代码表示赞赏。
问问题
816 次
3 回答
1
WMI 可以提供这个,使用 Win32_Service 类。在“C”中执行此操作非常麻烦,SDK 仅提供C++ 示例。这是等效的 C# 代码:
using System;
using System.Management; // Add reference!!
class Program {
public static void Main() {
var searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Service WHERE Name='wsearch'");
foreach (ManagementObject queryObj in searcher.Get()) {
Console.WriteLine("State = {0}", queryObj["State"]);
}
Console.ReadLine();
}
}
于 2010-02-10T17:24:13.453 回答
1
WMI 是 C++ 中的一个难题,但本机服务 API 非常干净。
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if(hSCManager)
{
SC_HANDLE hService = OpenService(hSCManager, _T("ServiceNameGoesHere"), SERVICE_QUERY_STATUS);
if(hService)
{
// service is installed
SERVICE_STATUS ServiceStatus;
if(ServiceQueryStatus(hService, &ServiceStatus))
{
// service is running
// get current state from ServiceStatus.dwCurrentState
}
else if(GetLastError() == ERROR_SERVICE_NOT_ACTIVE)
{
// service is not running
}
else
{
// error
}
CloseServiceHandle(hService);
hService = NULL;
}
else if(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
{
// service is not installed
}
else
{
// error
}
CloseServiceHandle(hSCManager);
hSCManager = NULL;
}
else
{
// error
}
于 2010-02-10T21:56:40.103 回答
-2
为了迂腐,C 编程语言不了解 Windows 文件索引或其他特定于平台的功能。ISO C 标准为字符串处理、文件处理(打开、关闭等)、算术运算等指定了一组严格的 API,并指定并定义了它们所作用的原语。这些操作与底层平台无关。所有这些 API 都由语言规范本身非常严格地定义(参见 ISO C99 标准以获取当前参考)。
您将不得不依赖外部(语言)库来获得您想要的 API(API 来确定文件索引是打开还是关闭)。所以你想知道的是a)这个库是什么b)从这个库中使用什么API来从你的C程序中调用c)如何将这个库链接到你的应用程序等等。
于 2010-02-10T20:58:55.363 回答