2016-11-22 237 views
-3

我試圖編譯下面的代碼,它是一個免費的代碼,我試圖理解它。我試圖測試它,但我得到一個問題。我收到一條消息錯誤「Error file filename.txt。Error 2」。設置文件的正確路徑

我認爲這應該是因爲該文件不在位於該專用文件夾中。我在桌面上有文件,你知道如何設置文件的路徑到桌面的c文件嗎?

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

#define BUFSIZE 1024 
#define MD5LEN 16 

DWORD main() 
{ 
    DWORD dwStatus = 0; 
    BOOL bResult = FALSE; 
    HCRYPTPROV hProv = 0; 
    HCRYPTHASH hHash = 0; 
    HANDLE hFile = NULL; 
    BYTE rgbFile[BUFSIZE]; 
    DWORD cbRead = 0; 
    BYTE rgbHash[MD5LEN]; 
    DWORD cbHash = 0; 
    CHAR rgbDigits[] = "abcdef"; 
    LPCSTR filename = "filename.txt"; 
    // Logic to check usage goes here. 

    hFile = CreateFile(filename, 
     GENERIC_READ, 
     FILE_SHARE_READ, 
     NULL, 
     OPEN_EXISTING, 
     FILE_FLAG_SEQUENTIAL_SCAN, 
     NULL); 

    if (INVALID_HANDLE_VALUE == hFile) 
    { 
     dwStatus = GetLastError(); 
     printf("Error opening file %s\nError: %d\n", filename, 
      dwStatus); 
     return dwStatus; 
    } 

    // Get handle to the crypto provider 
    if (!CryptAcquireContext(&hProv, 
     NULL, 
     NULL, 
     PROV_RSA_FULL, 
     CRYPT_VERIFYCONTEXT)) 
    { 
     dwStatus = GetLastError(); 
     printf("CryptAcquireContext failed: %d\n", dwStatus); 
     CloseHandle(hFile); 
     return dwStatus; 
    } 

    if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) 
    { 
     dwStatus = GetLastError(); 
     printf("CryptAcquireContext failed: %d\n", dwStatus); 
     CloseHandle(hFile); 
     CryptReleaseContext(hProv, 0); 
     return dwStatus; 
    } 

    while (bResult = ReadFile(hFile, rgbFile, BUFSIZE, 
     &cbRead, NULL)) 
    { 
     if (0 == cbRead) 
     { 
      break; 
     } 

     if (!CryptHashData(hHash, rgbFile, cbRead, 0)) 
     { 
      dwStatus = GetLastError(); 
      printf("CryptHashData failed: %d\n", dwStatus); 
      CryptReleaseContext(hProv, 0); 
      CryptDestroyHash(hHash); 
      CloseHandle(hFile); 
      return dwStatus; 
     } 
    } 

    if (!bResult) 
    { 
     dwStatus = GetLastError(); 
     printf("ReadFile failed: %d\n", dwStatus); 
     CryptReleaseContext(hProv, 0); 
     CryptDestroyHash(hHash); 
     CloseHandle(hFile); 
     return dwStatus; 
    } 

    cbHash = MD5LEN; 
    if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0)) 
    { 
     DWORD i; 
     printf("MD5 hash of file %s is: ", filename); 
     for (i = 0; i < cbHash; i++) 
     { 
      printf("%c%c", rgbDigits[rgbHash[i] >> 4], 
       rgbDigits[rgbHash[i] & 0xf]); 
     } 
     printf("\n"); 
    } 
    else 
    { 
     dwStatus = GetLastError(); 
     printf("CryptGetHashParam failed: %d\n", dwStatus); 
    } 

    CryptDestroyHash(hHash); 
    CryptReleaseContext(hProv, 0); 
    CloseHandle(hFile); 

    return dwStatus; 
} 
+0

'LPCSTR filename =「c:\\ Users \\ username \\ Desktop \\ filename.txt」;' – kaylum

+0

謝謝,它工作! – Ozzy

回答

1

或將該文件複製到.exe所在的位置。

+0

謝謝,也有效。 – Ozzy