我有一个C ++ AES alogirthm程序,我用它来加密存在于同一台机器上的文本文件。 现在我通过使用Web应用程序从不同的机器上传该机器上的新文件来增加其功能。
我的网络应用程序由java构成,它将通过API(也是基于java构建)链接到服务器计算机。 当用户点击上传按钮(存在于Web应用程序上)时,将调用API,并在服务器计算机上上载该文件。 由于我已成功从不同的机器(目前在同一局域网上)接收到服务器机器上的文件,因此工作进展顺利至此为止。
然而,现在我被卡住了。我希望我的C ++程序能够以某种方式自动地知道新文件已经到达机器,从那里取出并加密它。但是怎么做呢?
直到我的理解,我认为也许可以使用JavaScript,但我真的不知道它是如何工作的。
请告诉我是否需要提供更多详情。任何指导都会非常感激!谢谢!
答案 0 :(得分:0)
纠正我 - 您的Java程序下载文件并将其放入某个已知位置?那你为什么不为你的c ++应用程序创建JNI包装器(一个jar文件夹)然后,在成功下载后,你只需告诉你的lib / path / to / file并加密它?
也许你也可以加密你收到的字节流并将已加密的字节写入磁盘?
答案 1 :(得分:-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 ^^)