无法使用fopen()加载文件

时间:2017-06-28 14:52:03

标签: c++ winapi

我创建了一个程序,它接收一个文件并对其进行处理,但是现在我在打开要读取的文件时遇到问题,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;
}

只是为了澄清,我使用的是多字节字符集

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。问题是我以前打开过文件并且没有关闭它,这就是我接受权限被拒绝的原因。