-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;
}
だけ明確にする、私は問題を解決し
デバッガの使用方法を学びます。そして、[mcve]を提供してください。あなたは[ツアー]を撮影して[尋ねる]を済ませて、すでにこのすべてを知っていたでしょう。 – IInspectable
'fread()'が0を返す場合、 'CCrypter :: readFile()'はファイルを閉じません。 'fread()'が成功するか失敗するかにかかわらず、 'fopen()'が成功した場合は常にファイルを閉じる必要があります。 'fread()'の返り値を0としてテストすることは、読み込みエラーを検出するのには適切ではありません。 'if(fread(buffer、1、lenght、input)!= lenght)'を使うか、 'ferror()'を使うべきです。しかし、コードはC++を使っているので、なぜ 'fopen() 'を使うのですか?代わりに 'std :: ifstream'を使うべきです。 –
@RemyLebeau 'std :: ifstream'にいくつか問題があったのでfopen()を使用しましたが、問題はfopen()にあり、前にファイルパスを出力してもうまくいきます。私は実際には理想を持っていませんwhtは問題です – Miguel