程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> buffer-C++讀寫文件遇到問題,無法使用stream准確復制exe格式的二進制文件

buffer-C++讀寫文件遇到問題,無法使用stream准確復制exe格式的二進制文件

編輯:編程綜合問答
C++讀寫文件遇到問題,無法使用stream准確復制exe格式的二進制文件

使用的代碼如下:
其中:a是buffer,格式為char,棧數組(堆數組我也試過會出現同樣的問題)
length_of_file是之前設定的要寫入文件的長度

void MainProcessor::write()
{
std::cout << "Your new locked_file_name?(*.*)" << std::endl;
std::cin >> lock_it_file_name;
std::ofstream out(lock_it_file_name);
if (out.is_open())
{
for (int i = 0; i != length_of_file; i++)
out.write((char*)&a[i], sizeof(char));
out.close();
}
}
輸入輸出兩個文件的出現錯誤的位的16進制對比如下
VS中的出現問題的位置:下標118
VS中的出現問題的位置:下標118
UE中的文件對比
源文件為B1-B.exe
源文件
復制之後的文件為asd.txt
復制之後的文件
可以明顯的看出來,在70h-7的位置,出現了問題,向後偏移了一位,但是我在代碼中是沒有偏移的
單純的write的方法也試過了,是會出現同樣的問題的
具體的兩個文件由於無法上傳,所以請看以下的地址:
外部鏈接,兩個文件的資源
還請各位大神幫忙解決問題!這個問題困擾了好久了!

最佳回答:


ofstream 缺省是以文本格式打開文件,你用的write是二進制格式,所以你應該改為二進制格式打開:

    std::ofstream out(lock_it_file_name,std::ios::binary);

ViktorProphet
ViktorProphet
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved