0

(这里报告 https://superuser.com/questions/1511981/windows-10-creating-and-deleting-directory-in-remote-location-netapp-in-a-loop这次有更多数据和示例程序)

我正在处理一个问题 - 在小窗口中循环创建和删除目录从 API 得到不正确的响应 - 它说目录已删除(返回 true),但它会在那里停留更多时间(比如 20-30 毫秒)。会导致什么?该程序在 Windows 7(NetApp 存储或本地磁盘)上运行良好。Windows 10 通过本地磁盘;但 NetApp 存储失败。需要休眠获取 API(DeleteDirectory 正确)

写了一段代码在 windows , c 程序中重现(因为管理员希望用这种方式排除 java,powershell 等)

#include "pch.h"
#include <iostream>
#include <cstdlib>

#include <windows.h>
#include <direct.h>

using namespace std;
int main()
{

    const char* sleepTimeAsString = std::getenv("SLEEP_TIME_MILLIS");
    const char* remoteRoot = std::getenv("REMOTE_UNC_PATH");
    if (sleepTimeAsString == NULL) {
        std::cout << "env  SLEEP_TIME_MILLIS needed: " << '\n';
    }
    if (remoteRoot == NULL) {
        std::cout << "env  REMOTE_UNC_PATH needed: " << '\n';
    }

    std::cout << "set REMOTE_UNC_PATH=" << remoteRoot  << '\n';
    std::cout << "set SLEEP_TIME_MILLIS=" << sleepTimeAsString << '\n';

    CreateDirectory(remoteRoot,NULL);
    std::cout << "version 0.10 "  << '\n';
    std::cout << "created " << remoteRoot << '\n';
    string path = remoteRoot;
    string mynode = "/childdirectory";
    string path2 = path + mynode;


    DWORD error=  GetLastError();
    std::cout << error << '\n';

    long sleepTime = atol(sleepTimeAsString);
    for (int i = 0; i < 1000; i++) {
        std::cout << "loop "<< i << '\n';
        if (!CreateDirectory( path2.c_str(), NULL)) {
            DWORD errorlooped = GetLastError();
            std::cout <<"failed to create " << errorlooped << '\n';
            exit(-1);

        }
        else {
            std::cout << "success created " << path2.c_str() << '\n';
        }

        Sleep(sleepTime);


        if (!RemoveDirectory(path2.c_str())) {
            DWORD errorlooped = GetLastError();
            std::cout << "failed remove "<< errorlooped << '\n';
            exit(-1);
        }
        else {
            std::cout << "success deleted " << path2.c_str() << '\n';
        }
        Sleep(sleepTime);
    }
}

结果表:一旦我在调用之间提供了足够的睡眠,测试就开始在这个 NetApp 目录上传递。

OS   Disk             Sleep Time(ms) Result 
Win7 Local            0              PASS
Win7 Remote           0              PASS

WIn10 Local           0              PASS
WIn10 Remote (NetApp) 0              FAIL
WIn10 Remote (NetApp) 10             FAIL
WIn10 Remote (NetApp) 20             FAIL
WIn10 Remote (NetApp) 40             PASS 

我应该对这个问题进行更多调查(在返回系统管理员之前) - 欢迎提出想法。

4

0 回答 0