Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用c在文件中写入二进制数据_C++_C_Visual Studio 2010_Msdn - Fatal编程技术网

C++ 无法使用c在文件中写入二进制数据

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

我在windows vista操作系统中使用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;
编辑


我真的很抱歉,问题在于文件的位置,它是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.