C++ 无法使用c在文件中写入二进制数据
我在windows vista操作系统中使用vs2010,问题是我想读取和exe文件加密并存储它,但当我写回数据时,没有插入任何内容,我的意思是文件已创建,但没有错误,文件为空,我已经做了一千次,它在eclipse上工作,但在vs2010上不工作,我需要将其移植到gui中谁能告诉我哪里错了C++ 无法使用c在文件中写入二进制数据,c++,c,visual-studio-2010,msdn,C++,C,Visual Studio 2010,Msdn,我在windows vista操作系统中使用vs2010,问题是我想读取和exe文件加密并存储它,但当我写回数据时,没有插入任何内容,我的意思是文件已创建,但没有错误,文件为空,我已经做了一千次,它在eclipse上工作,但在vs2010上不工作,我需要将其移植到gui中谁能告诉我哪里错了 FILE *pFile, *file; size_t result; pFile = fopen(fName, "r+b"); if (pFile==NULL) {MessageBox(NULL, L"Co
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;
编辑
我真的很抱歉,问题在于文件的位置,它是unicode格式的,因为fopen接受ascii,位置只显示C,我必须将其转换以获得正确的结果,谢谢您希望使用
pFile
而不是fread()中的文件
我认为您打开读取的文件不是Ascii,因此您假设基于字符大小计算文件大小是错误的。
如果您以字节为单位计算文件的正确大小,并读取和写入这些字节,您应该可以。您正在读取和写入同一个文件
而((结果=fread(sData->fbuffer,1,sData->fSize,文件)>0){
如果(!(写入(sData->fbuffer,1,结果,文件)){
因为您刚刚打开了这个文件,所以它不读取任何内容,所以也不写入任何内容
从手册页:
w+ or wb+ or w+b
Truncate to zero length or create file for update.
正如我在中测试的那样,它是Ascii码eclipse@KeshavNair,是的,exe文件在文件中打开并分配给而不是pFile
。很抱歉我更改了它仍然没有luckhow我可以在切换位时执行相同的操作吗?例如pbFile[i]^=0x55;
用于加密
w+ or wb+ or w+b
Truncate to zero length or create file for update.