我試圖製作一個exe程序,可以讀取任何文件到二進制文件,然後使用這個二進制文件製作完全相同的文件。fwrite似乎並沒有複製整個文件(只是開始)
所以我想通了,我可以用fopen(content,"rb")
讀取文件作爲二進制, 使用fwrite
我可以寫數據塊到流。但問題是當我fwrite
它似乎並沒有複製一切。
例如,我打開的文本包含31231232131
。當我將它寫入另一個文件時,它僅複製3123
(前4個字節)。
我可以看到,這是一件非常簡單的事情,但我不知道是什麼。
#include <stdio.h>
#include <iostream>
using namespace std;
typedef unsigned char BYTE;
long getFileSize(FILE *file)
{
long lCurPos, lEndPos;
lCurPos = ftell(file);
fseek(file, 0, 2);
lEndPos = ftell(file);
fseek(file, lCurPos, 0);
return lEndPos;
}
int main()
{
//const char *filePath = "C:\\Documents and Settings\\Digital10\\MyDocuments\\Downloads\\123123.txt";
const char *filePath = "C:\\Program Files\\NPKI\\yessign\\User\\008104920100809181000405,OU=HNB,OU=personal4IB,O=yessign,C=kr\\SignCert.der";
BYTE *fileBuf;
FILE *file = NULL;
if ((file = fopen(filePath, "rb")) == NULL)
cout << "Could not open specified file" << endl;
else
cout << "File opened successfully" << endl;
long fileSize = getFileSize(file);
fileBuf = new BYTE[fileSize];
fread(fileBuf, fileSize, 1, file);
FILE* fi = fopen("C:\\Documents and Settings\\Digital10\\My Documents\\Downloads\\gcc.txt","wb");
fwrite(fileBuf,sizeof(fileBuf),1,fi);
cin.get();
delete[]fileBuf;
fclose(file);
fclose(fi);
return 0;
}
在'{'和'}'中包含else子句。縮進並不確定'C++'中的塊。否則,如果您無法打開文件,代碼將會崩潰。 –
你不用C語言編程,你正在使用C++。您使用'<<'運算符執行輸出的方式是100%C++。我已經重新標記了這個問題。 – unwind
@unwind儘管很少couts這肯定是C的問題。 – user3125367