コード例 #1
0
bool Sub_CreateFile_AccessDisposition(TestLog& log, LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwCreationDisposition)
{
    HANDLE h = apiCreateFile(lpFileName,
        dwDesiredAccess,
        FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
        0,
        dwCreationDisposition,
        0,
        0);

    if(h == INVALID_HANDLE_VALUE)
    {
        log.GetStream(TestLog::MT_ERROR) << L"CreateFile" << endl;
        return false;
    }

    BOOL result = CloseHandle(h);
    if(!result)
    {
        log.GetStream(TestLog::MT_ERROR) << L"CloseHandle" << endl;
        return false;
    }

    return true;
}
コード例 #2
0
bool MakeFile(TestLog& log, const std::wstring& lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, size_t iFileSizeKB, size_t buffersizeKB)
{
    File f(lpFileName, dwDesiredAccess, dwShareMode, CREATE_ALWAYS);

    if(!f.IsValidHandle())
    {
        log.GetStream(TestLog::MT_ERROR) << L"CreateFile" << endl;
        return false;
    }

    if(buffersizeKB == 0)
    {
        buffersizeKB = 1;
    }
    
    char* buffer = new char[buffersizeKB * 1024];

    for(size_t i = 0; i < buffersizeKB; i++)
    {
        memcpy_s(buffer + (1024 * i), 1024, "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "ABCDEFGHIJKLMNOPQRSTUV\r\n", 1024 );
    }

    DWORD writeBytes = 0;

    for(size_t x = 0; x < iFileSizeKB; x += buffersizeKB)
    {        
        if(uWriteFile(f, buffer, buffersizeKB * 1024, &writeBytes, 0) == FALSE)
        {
            log.GetStream(TestLog::MT_ERROR) << L"WriteFile" << endl;
            delete[] buffer;
            return false;
        }

        if(writeBytes != buffersizeKB * 1024)
        {
            log.GetStream(TestLog::MT_ERROR) << L"WriteFile: writeBytes Error." << endl;
            delete[] buffer;
            return false;
        }
    }

    delete[] buffer;

    log.GetStream(TestLog::MT_MESSAGE) << L"<" << lpFileName << L"> file created." << endl;
    return true;
}
コード例 #3
0
bool TouchFile(TestLog& log, LPCWSTR lpFileName)
{
    File f(lpFileName, GENERIC_READ, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_ALWAYS);

    if(!f.IsValidHandle())
    {
        log.GetStream(TestLog::MT_ERROR) << L"CreateFile" << endl;
        return false;
    }

    log.GetStream(TestLog::MT_MESSAGE) << L"<" << lpFileName << L"> file created." << endl;
    return true;
}
コード例 #4
0
BOOL TouchManyFilesConcurrently(TestLog& log, size_t iFileNum, const std::wstring& basePath, std::vector<std::wstring>& vCreatedFiles)
{
    wstring predirectorypath;

    if(basePath.size() > 0)
    {
        predirectorypath = GetWidTestBasePath();

        if(!IsFileExist(basePath.c_str()))
        {
            CreateSubDir(basePath.c_str());
        }

        log.GetStream(TestLog::MT_MESSAGE) << L"Set Base path to : " << basePath << endl;
        BOOL fOk = uSetCurrentDirectory(basePath.c_str());
        if(!fOk)
        {
            log.GetStream(TestLog::MT_ERROR) << L"Current Directory Setting Failed. : " << GetLastErrorStr() << endl;
            return FALSE;
        }
    }

    if(vCreatedFiles.capacity() < iFileNum)
    {
        vCreatedFiles.reserve(iFileNum);
    }

    TestFileName t;

    wstring fileName = t.GetFirstFileName();
    vCreatedFiles.push_back(fileName);

    for(size_t i = 0; i < iFileNum; ++i)
    {
        fileName = t.GetNextFileName();
        vCreatedFiles.push_back(fileName);
    }   

    if(basePath.size() > 0 && predirectorypath.size() > 0)
    {
        BOOL fOk = uSetCurrentDirectory(predirectorypath.c_str());
        if(!fOk)
        {
            log.GetStream(TestLog::MT_ERROR) << L"Current Directory Setting Failed. : " << GetLastErrorStr() << endl;
            return FALSE;
        }
    }

    return TRUE;
}
コード例 #5
0
bool DeleteFileOrCheck(TestLog& log, const std::wstring& lpFileName)
{
    SetFileAttributesW(lpFileName.c_str(), FILE_ATTRIBUTE_NORMAL);
    BOOL result = DeleteFileW(lpFileName.c_str());

    if(result)
    {
        log.GetStream(TestLog::MT_MESSAGE) << L"Deletion success." << endl;
        return true;
    }

    if(GetLastError() == ERROR_FILE_NOT_FOUND)
    {
        log.GetStream(TestLog::MT_MESSAGE) << L"Deletion success(file not found)." << endl;
        return true;
    }

    log.GetStream(TestLog::MT_ERROR) << L"<" << lpFileName << L"> file deletion." << endl;
    return false;
}
コード例 #6
0
ファイル: PTest.cpp プロジェクト: BenjaminKim/FileSystemTest
void ListFiles(TestLog& log, const wstring& dirpath)
{
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;

    WIN32_FIND_DATA wfd;

    // Find the first file in the directory.
    hFind = apiFindFirstFile(dirpath.c_str(), &wfd);

    if(hFind == INVALID_HANDLE_VALUE)
    {
        log.GetStream(TestLog::MT_ERROR) << L"Invalid file handle. Error is " << GetLastErrorStr() << std::endl;
        return;
    }
    else 
    {
        log.GetStream(TestLog::MT_ERROR) << L"First file name is " << wfd.cFileName << std::endl;

        // List all the other files in the directory.

        for(;;)
        {
            if(apiFindNextFile(hFind, &wfd) == 0)
            {
                break;
            }

            log.GetStream(TestLog::MT_ERROR) << L"Next file name is " << wfd.cFileName << std::endl;
        }

        dwError = GetLastError();
        uFindClose(hFind);
        if(dwError != ERROR_NO_MORE_FILES)
        {
            log.GetStream(TestLog::MT_ERROR) << L"FindNextFile error. Error is " << GetLastErrorStr() << std::endl;
        }
    }
}
コード例 #7
0
BOOL CreateDirectoryWithAttributes(TestLog& log, const std::wstring& path, DWORD dwAttribute)
{
    BOOL fOk = uCreateDirectory(path.c_str(), 0);

    log.GetStream(TestLog::MT_MESSAGE) << GetString_dwFileAttributes(dwAttribute) << std::endl;

    if(!fOk)
    {
        log.GetStream(TestLog::MT_ERROR) << L"Directory creation failed." << endl;
        return FALSE;
    }

    fOk = uSetFileAttributes(path.c_str(), dwAttribute);
    DWORD dwError = GetLastError();
    if(!fOk)
    {
        log.GetStream(TestLog::MT_ERROR) << L"Cannot apply the attributes to the directory. " << GetErrorDefineString(dwError) << endl;
        return FALSE;
    }

    return TRUE;
}
コード例 #8
0
void CopyFileEx_ExistingDst(TestLog& log, BOOL bFailIfExists)
{
    const wstring pSrcFileName = GetSrcFileName();
    const wstring pDstFileName = GetDstFileName();

    if(!MakeFile(log, pSrcFileName))
    {
        log.GetStream(TestLog::MT_ERROR) << L"Cannot create a file." << endl;
        return;
    }

    if(!TouchFile(log, pDstFileName))
    {
        log.GetStream(TestLog::MT_ERROR) << L"Cannot create a file." << endl;
        return;
    }

    BOOL result = apiCopyFileEx(pSrcFileName.c_str(), pDstFileName.c_str(), 0, 0, 0, bFailIfExists ? COPY_FILE_FAIL_IF_EXISTS : 0);

    if(result)
    {
        CheckFileData(log, pDstFileName);
    }

    if(!DeleteFileOrCheck(log, pSrcFileName))
    {
        log.GetStream(TestLog::MT_ERROR) << L"Cannot delete the file created before." << endl;
    }
    if(!DeleteFileOrCheck(log, pDstFileName))
    {
        log.GetStream(TestLog::MT_ERROR) << L"Cannot delete the file created before." << endl;
        return;
    }

    log.Ok();
}
コード例 #9
0
bool CheckFileData(TestLog& log, const std::wstring& lpFileName, INT32 iFileSizeKB, size_t buffersizeKB)
{
    File f(lpFileName, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING);

    if(!f.IsValidHandle())
    {
        log.GetStream(TestLog::MT_ERROR) << L"CreateFile" << endl;
        return false;
    }

    if(buffersizeKB == 0)
    {
        buffersizeKB = 1;
    }

    char* buffer = new char[buffersizeKB * 1024];

    for(size_t i = 0; i < buffersizeKB; i++)
    {
        memcpy_s(buffer + (1024 * i), 1024, "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
            "ABCDEFGHIJKLMNOPQRSTUV\r\n", 1024 );
    }

    char* readBuffer = new char[buffersizeKB * 1024];
    DWORD readBytes = 0;

    for(int x = 0; x < iFileSizeKB; x += buffersizeKB)
    {
        if(uReadFile(f, readBuffer, buffersizeKB * 1024, &readBytes, 0) == FALSE)
        {
            log.GetStream(TestLog::MT_ERROR) << L"ReadFile" << endl;
            delete[] readBuffer;
            delete[] buffer;
            return false;
        }
        if(readBytes != buffersizeKB * 1024)
        {
            log.GetStream(TestLog::MT_ERROR) << L"ReadFile: readBytes Error." << endl;
            delete[] readBuffer;
            delete[] buffer;
            return false;
        }
        if(memcmp(readBuffer, buffer, buffersizeKB * 1024) != 0)
        {
            log.GetStream(TestLog::MT_ERROR) << L"memcmp" << endl;
            delete[] readBuffer;
            delete[] buffer;
            return false;
        }
    }

    delete[] readBuffer;
    delete[] buffer;

    log.GetStream(TestLog::MT_MESSAGE) << L"CheckFileData success." << endl;
    return true;
}