-1

Windows Vista OSでvs2010を使用しています問題は、ファイルを読み取ってexeファイルを暗号化して保存することですが、データを書き戻すときに何も挿入されないということです。つまり、ファイルは作成されますが、エラーはなく、ファイルは空です。私はそれを何千回も実行しましたが、Eclipseでは機能しますが、vs2010では機能しません。GUIに移植する必要があります。誰かが私が間違っている場所にリダイレクトしてください。

FILE *pFile, *file;
size_t result;

pFile = fopen(fName, "r+b");
if (pFile==NULL) {MessageBox(NULL, L"Could not open file", L"Information", MB_ICONERROR); return FALSE;}

fseek(pFile, 0 ,SEEK_END);
sData->fSize = ftell(pFile);
rewind(pFile);

sData->fbuffer = (unsigned char *) malloc(sizeof(char) * sData->fSize);
if (sData->fbuffer == NULL) {MessageBox(NULL, L"Memory error", L"Information", MB_ICONERROR); fclose(pFile); return FALSE;}

file = fopen("out.txt", "w+b");
while ((result = fread(sData->fbuffer, 1, sData->fSize, file)) > 0) {
    if (!(fwrite(sData->fbuffer, 1, result, file))) {
        MessageBox(NULL, L"Write error", L"Information", MB_ICONERROR);
    }
    fclose(file);
}
fclose(file);

//result = fread(sData->fbuffer, 1, sData->fSize, pFile);
//if (result != sData->fSize) {MessageBox(NULL, L"Read error", L"Information", MB_ICONERROR); fclose(pFile); return FALSE;}

fclose (pFile);

return TRUE;

編集

fopenがasciiを受け入れ、場所がCIのみを示しているため、Unicode形式であるファイルの場所に問題があることを本当に申し訳ありませんが、適切な結果を得るにはCIを変換する必要がありますありがとう

4

3 に答える 3

1

inpFileの代わりに使用したいでしょう。filefread()

//----------------------------------------------------  pFile not file
while ((result = fread(sData->fbuffer, 1, sData->fSize, pFile)) > 0) {
    if (!(fwrite(sData->fbuffer, 1, result, file))) {
        MessageBox(NULL, L"Write error", L"Information", MB_ICONERROR);
    }
    fclose(file);
}
于 2013-06-23T07:25:15.447 に答える
0

読み取り用に開いているファイルは Ascii ではないと思うので、char のサイズに基づくファイル サイズの計算の仮定が間違っています。ファイルの正しいサイズをバイト単位で計算し、それらのバイト数を読み書きすれば問題ありません。

于 2013-06-23T07:31:58.170 に答える
0

同じファイルに対して読み書きを行っています。

while ((result = fread(sData->fbuffer, 1, sData->fSize, file )) > 0) {

if (!(fwrite(sData->fbuffer, 1, 結果,ファイル))) {

このファイルを開いたばかりなので、何も読み取られないため、何も書き込まれません。

マニュアルページから:

w+ or wb+ or w+b
Truncate to zero length or create file for update.
于 2013-06-23T07:59:03.860 に答える