#include <stdio.h>int main(void)
{
int buf[100] = {10, 100, 1000, 10000};
FILE *file;
file = fopen("test.bin", "wb");
fwrite(buf, sizeof(int), 100, file);
file = fopen("test.txt", "w");
fwrite(buf, sizeof(int), 100, file);
fclose(file);
return 0;
}
バイナリファイルとテキストファイルの2つの形式で保存してファイルの大きさを比較したのですが、両方とも同じ容量でした。
バイナリファイルの方が容量が小さくなるはずなのに同じになってしまうのはなぜなんでしょうか?
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
file = fopen("test.txt", "w");
fwrite(buf, sizeof(int), 100, file);
では「テキストファイルで保存」にならない気がしますよ。
試しに、保存したtest.txtを開いてみてください。文字化けして、「テキストファイル」になっていないはずですよ。
int buf[100] を「テキストファイルで保存」というのは、ひょっとして、
file = fopen("test.txt", "w");
for(int i=0; i<100; i++) {
fprintf(file,"%d ",buf[i]);
}
の意味では?
No.5
- 回答日時:
モードに b の有る無しは、Linux では違いがありません
http://linuxjm.osdn.jp/html/LDP_man-pages/man3/f …
> 文字 'b' を (中略) Linux では無視される。
Windows はあるようです
https://learn.microsoft.com/ja-jp/cpp/c-runtime- …
> LF 文字は出力時に CRLF の組み合わせに変換されます
他にも EOF(1A) 文字の扱いや、Unicode ストリーム出力関数による変換も行われるようです。
LF(0A) と CR(0D) 文字を含まないデータ出力をしたならば、
Windows でも同じ結果になる可能性があります。
No.4
- 回答日時:
「どんな場合でも必ずバイナリファイルの方がテキストファイルより小さい」わけではない.
テキストファイルでは入出力に際してさまざまな変換が行われることがあるが, あくまで「変換が行われることがある」だけであって
・どんな場合でも変換されるわけではない
・変換されるとしても長くなるとは限らない
のだ.
なおどのような変換が行われる (ことがある) のかはシステム依存なので, プログラムだけを出しても意味はない.
No.3
- 回答日時:
No2です。
ちなみに、あなたが提示されたソースをコンパイルして実行すると
windowsならtest.txtは401バイト test.binは400バイトになります。
linuxならtest.txt、test.binともに400バイトになります。
l
No.2
- 回答日時:
OSは何でしょうか。
Windowsならテキストモードの場合、\n<->CR/LF変換が行われサイズが変わりますが、Linuxの場合は、テキストモードとバイナリーモードの区別はないのでサイズは変わりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Firefox で file:// で始まる U...
-
fopen64について
-
並び方、
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
MATLABのm-fileについて
-
PerlでのUseless use...
-
VBAでCSVファイルを途中行まで...
-
教えて!perlから.exeファイル...
-
ExcelをCSV書き出す場合のシー...
-
パスから最後のディレクトリだ...
-
Excelマクロでフォルダ内のCSV...
-
VBAで巨大なファイルの途中から...
-
ListBoxのデータを高速でファイ...
-
batファイルでrenameができませ...
-
JavaでCSVファイルを高速に読む...
-
エクセルVBA コードが同じでも...
-
Edge スクレイピング
-
ページ間での変数の受け渡し
-
バッチファイルの作り方(CSV→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python renameについて
-
fgets で値が取得できない
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
ファイル全てを .xlsm に変更し...
-
read() on unopened filehandle...
-
csvファイルの横方向への改行に...
-
VBAコードを張り付け後のエクセ...
-
Firefox で file:// で始まる U...
-
JSP URLに表示される拡張子 .jsp
-
drtファイルはどうしたら開...
-
並び方、
-
重複ファイル名ある場合ファイ...
-
VBA テキストファイルを読み取...
-
cgiでサーバーにファイルを追加...
-
HTMLのフォームで画像と文...
-
WindowsでPerlをする際,1行目の...
-
バイナリファイルの出力
-
Perlでのパーミッション変更の仕方
-
foreach内での変数の扱い?
おすすめ情報