為什麼二進制文件不能讀取
A. 如圖,請問在labview中讀取二進制文件這個錯誤是為什麼
「讀取二進制文件」函數的「數據類型」接線端弄錯了。
比如你文件里存了一個{double和U8組成的}簇,是8+1共9個位元組。
但是你程序里的數據類型弄成了一個{double和i32組成的}簇,是8+4共12個位元組,程序在文件中讀到9個位元組之後還需要繼續讀,直到讀到12個位元組,但是文件已經到達結尾了,於是就提示這個錯誤啦。
B. Bin二進制文件讀取問題
二進制的文件一般正常情況下是不能直接讀出來的哦,用一般的軟體能打開文件,但也只能一段一段的讀,再說每個軟體里的資料庫可能都是加了密的。不一定能解得開。
C. c++ 從二進制文件里 無法讀出數據 並顯示到屏幕上,求大神解答
試一下把生成文件和讀取文件的兩段代碼都開啟並運行, 你會發現這個程序不會報錯。為什麼呢?
string 類並非單純的char數組,裡面有其他C++標准庫用來實現string類各種方便功能所需的變數。string類會自己動態分配一塊內存用來存儲你的信息。這段內存的位置在每次運行程序的時候不同。 你在序列化你的string的時候,他會把string內部記錄內存地址變數也序列化。兩次運行,如果分配到的動態內存地址不同, 你的ok類在調用destructor的時候就會試圖destruct string name, 然而name裡面的地址是錯誤的,所以就會在釋放內存的時候出錯。
D. fread函數為什麼讀取二進制文件會出問題
在讀寫二進制文件的時候,必須確保文件的打開形式是以 二進制讀寫的形式打開的, 即:文件的打開形式必須是 "rb", "wb" 要不然,讀寫數據的時候,就會出現錯誤。
函數使用說明:
FILE * fopen(const char * path,const char * mode);
參數path字元串包含欲打開的文件路徑及文件名,
參數mode字元串則代表著流形態。mode有下列幾種形態字元串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,只允許讀寫數據。
rt+ 讀寫打開一個文本文件,允許讀和寫。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
wt+ 讀寫打開或著建立一個文本文件;允許讀寫。
at+ 讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此文件許可權也會參考umask 值。
有些C編譯系統可能不完全提供所有這些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。
返回值
文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中
附加說明
一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。
fread函數和fwrite函數
1.函數功能
用來讀寫一個數據塊。
2.一般調用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.說明
(1)buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。
(2)size:要讀寫的位元組數;
(3)count:要進行讀寫多少個size位元組的數據項;
(4)fp:文件型指針。
E. 為什麼有些二進制文件讀取不出東西
試一下把生成文件和讀取文件的兩段代碼都開啟並運行,
string 類並非單純的char數組,裡面有其他C++標准庫用來實現string類各種方便功能所需的變數。string類會自己動態分配一塊內存用來存儲你的信息。這段內存的位置在每次運行程序的時候不同。 你在序列化你的string的時候,他會把string內部記錄內存地址變數也序列化。兩次運行,如果分配到的動態內存地址不同, 你的ok類在調用destructor的時候就會試圖destruct string name, 然而name裡面的地址是錯誤的,所以就會在釋放內存的時候出錯。
F. c++讀取二進制文件出錯
原因很簡單,包含string類的struct不能直接把struct裡面的內容存到文件,直接存的話只會存了string這個類的基本信息,string自己動態分配的東西你存不下來,所以會丟失string裡面的內容
G. 為什麼Excel無法打開二進制數據
原因:當前保存的格式為早期Excel版本的格式,所以會彈出該提示。
在微軟發布office 2007以後,office文件的存儲方式由二進制文件轉變成了xml格式文件。所以在office 2007以前的版本即office 2003,office 2000,office xp,office 97這些軟體版本的存儲文檔統稱為早期版本。
由於文件格式由二進制文件轉化為xml文件格式,xml格式比二進制文件的存儲信息量大,而且壓縮都更高,而且有很多特性是二進制文件所不具備的,所以office 2007及以上版本的excel打開早期版本的二進制文件時會對工作簿進行兼容性檢查,因為二進制文件有很多的東西不能保存上,必須存儲成xml格式的文件,否則就造成功能格式數據丟失的情形。
(7)為什麼二進制文件不能讀取擴展閱讀:
解決方案就是把這個文件另存為「.xlsx」格式即可,另存步驟如下:
所需材料:Excel 2007演示。
一、首先點擊Excel 2007窗口左上角的「Office按鈕」(其它版本點擊「文件」菜單)。