2017-06-28 9 views
-3

私は(、関数fopenをファイルを取り、それをecryptsプログラムを作成するが、今読んでファイルを開く問題とi'am)は常に0はfopenを使用してファイルを読み込むことができません()

void run(){ 
    char buffer[260] = { '\0' }; 
    GetWindowTextA(Path,buffer,260); 
    encryptFile(buffer, "C:\\Users\\DownD\\Desktop\\Some.dat"); 
} 
を返します

私はこの問題がバッファの配列を例えば "C:\\ Somefile.exe"のような文字列で置き換えるときに、この関数のどこかにあると思う(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; 
} 

だけ明確にする、私は問題を解決し

+3

デバッガの使用方法を学びます。そして、[mcve]を提供してください。あなたは[ツアー]を撮影して[尋ねる]を済ませて、すでにこのすべてを知っていたでしょう。 – IInspectable

+1

'fread()'が0を返す場合、 'CCrypter :: readFile()'はファイルを閉じません。 'fread()'が成功するか失敗するかにかかわらず、 'fopen()'が成功した場合は常にファイルを閉じる必要があります。 'fread()'の返り値を0としてテストすることは、読み込みエラーを検出するのには適切ではありません。 'if(fread(buffer、1、lenght、input)!= lenght)'を使うか、 'ferror()'を使うべきです。しかし、コードはC++を使っているので、なぜ 'fopen() 'を使うのですか?代わりに 'std :: ifstream'を使うべきです。 –

+0

@RemyLebeau 'std :: ifstream'にいくつか問題があったのでfopen()を使用しましたが、問題はfopen()にあり、前にファイルパスを出力してもうまくいきます。私は実際には理想を持っていませんwhtは問題です – Miguel

答えて

1

を設定してマルチバイト文字を使用しています。問題は以前にファイルを開いて閉じなかったため、許可が拒否されたのです。

関連する問題