我创建了一个程序,它接收一个文件并对其进行处理,但是现在我在打开要读取的文件时遇到问题,fopen()总是返回0。
void run(){
char buffer[260] = { '\0' };
GetWindowTextA(Path,buffer,260);
encryptFile(buffer, "C:\\Users\\DownD\\Desktop\\Some.dat");
}
我认为问题出在这个函数run()的某个地方,因为当用一些字符串替换缓冲区数组时," C:\\ Somefile.exe"替换函数encryptFile():
encryptFile("C:\\Somefile.exe", "C:\\Users\\DownD\\Desktop\\Some.dat");
。它读取的文件很干净。
这是项目其余部分的一部分。
int CCrypter::encryptFile(char* filePath, LPCSTR outFile)
{
unsigned char* data = NULL;
int cypherSize;
int fSize = readFile(data, filePath);
if (!fSize)
return 2;
unsigned char *ciphertext = new unsigned char[fSize];
cypherSize = encrypt(data, fSize, ciphertext);
if (!cypherSize)
return 3;
if (!Create_File(ciphertext, cypherSize, outFile))
return 4;
return 1;
}
int CCrypter::readFile(unsigned char *&buffer, const char* path)
{
int lenght = 0;
OutputDebugString(path);
FILE* input = fopen(path, "rb");
if (!input) // Input is always 0
return 0;
fseek(input, 0, SEEK_END);
lenght = ftell(input);
buffer = new unsigned char[lenght];
printf("%d", buffer);
ZeroMemory(buffer, lenght);
rewind(input);
if (!fread(buffer, 1, lenght, input))
return 0;
fclose(input);
return lenght;
}
只是为了澄清,我使用的是多字节字符集
答案 0 :(得分:1)
我解决了这个问题。问题是我以前打开过文件并且没有关闭它,这就是我接受权限被拒绝的原因。