2016-09-23 62 views
0

我有一个C++ AES alogirthm程序,用于加密存在于同一台机器上的文本文件。 现在我正在通过使用Web应用程序,通过从不同机器上传该机器上的新文件来增加其功能。将C++程序与Java API连接

我的web应用程序由java构成,它将通过一个API(它也构建在java上)链接到服务器机器。 当用户点击上传按钮(出现在网络应用程序上)时,API将被调用,并且它将在服务器上上传文件。 由于我已经从不同的机器(目前在同一LAN上)成功接收到服务器机器上的文件,所以工作一直顺利进行。

但是,现在我被卡住了。我希望我的C++程序能够自动地知道一个新文件已经到达机器上,并从那里取出并加密它。但是,怎么做呢?

直到我的理解,我想也许JavaScript可以使用,但我真的不知道如何工作。

请让我知道,如果我需要提供更多的细节。任何指导将非常感激!谢谢!!

+0

在C++中,您可以监视一个目录以显示新文件。在Linux上,你在Windows上使用了某些东西。 –

+0

我假设在用于上载文件的Java应用程序中存在某种类型的文件上载事件处理程序,这些文件也将其保存在服务器上。如果是这种情况,那么你只需要在那之后执行C++应用程序。 – Archer

回答

0

纠正我 - 您的Java程序下载文件并将其放入某个已知位置?那么为什么不为你的C++应用程序创建JNI包装器(一个jar库),然后,在成功下载之后,你只需告诉你的lib/path/to /文件并加密它呢?

也许你也可以加密你接收到的字节流并将已加密的字节写入磁盘?

-1

这可以帮助你,如果我理解正确的话你: https://msdn.microsoft.com/enus/library/windows/desktop/aa365261(v=vs.85).aspx

这里是一个工作示例:

#include <windows.h> 
#include <stdio.h> 
#define DIR_PATH L"C:\\temp\\files" 

void encrypt(WCHAR* fileName); 
OVERLAPPED overlapped = {0}; 
union { 
    FILE_NOTIFY_INFORMATION i; 
    char d[sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH]; 
} fni; 

int main() 
{ 
    HANDLE hDirectory; 
    BOOL res; 
    DWORD bytesReturned; 

    // Create handle for the directory 
    hDirectory = CreateFileW(DIR_PATH, FILE_LIST_DIRECTORY | GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_BACKUP_SEMANTICS,NULL); 
    overlapped.hEvent = CreateEvent(0,0,0,0); 

    // Monitor as long as running 
    while (1) 
    { 
     res = ReadDirectoryChangesW(hDirectory,(LPVOID)&fni,sizeof(fni),FALSE,FILE_NOTIFY_CHANGE_SIZE, 
                   &bytesReturned,&overlapped,NULL); 
     // Error checking 
     if (res == 0) 
     { 
      printf("error: %d\n",GetLastError()); 
      return 1; 
     } 

     // check if a new file has been created in the directory 
     GetOverlappedResult(hDirectory,&overlapped,&bytesReturned,TRUE); 
     if (fni.i.Action != 0) 
      encrypt(fni.i.FileName); 
    } 
} 

//This is the encryption function 
void encrypt(WCHAR* fileName) 
{ 
    wprintf(L"Encrypting code here!\nFileName=%ls\n",fileName); 
} 

只需更换DIR_PATH和编辑加密功能

(我的第一次在这里回答btw ^^)

+0

这确实非常有用。谢谢一堆!如果我需要进一步了解这个概念,请在这里再次评论。但是这肯定帮了我很多!干杯! – DD25

+0

我的代码是用C++编写的,它能用吗?考虑到它的权利? – DD25