問題タブ [fseek]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Cプログラミングfwriteがファイルの終わりにジャンプします
私はCモジュールを書いていますが、これまでに見たことのない興味深い問題に直面しています。
モジュールを実行すると、次のような印刷出力が表示されます。
ファイルポインタをファイルの先頭に設定しました。データを書き込むときは、目的の位置にデータを書き出してから、書き込まれたバイト数(この場合は8)でファイルの位置をインクリメントする必要があります。しかし、私がftellを実行すると、位置が突然6018(ファイルの元のサイズに8を加えたもの)にジャンプしたようです。
なぜこれが発生し、どうすればこの動作を防ぐことができますか?
c - バイナリ ファイルで fseek が失敗する
編集私の問題を発見しました。fseek の origin パラメータに使用できる値が SEEK_SET SEEK_CUR と SEEK_END だけであることに気づかなかったので、呼び出しを fseek(diskPointer, startOfData, SEEK_SET); に変更しました。
バイナリ モードで読み取りおよび書き込み用にファイルを開いているので、ファイルに対して fseek、fread、および fwrite を使用しています。コード全体で fwrite を呼び出す前に、fseek を使用してファイル ポインターを正しい位置に設定していますが、fseek が失敗してゼロ以外の値を返しているようです。fseek が失敗する理由は何ですか?
ファイルに「値」を書き込む関数は次のとおりです。値が書き込まれていますが、fseek で取得したい位置ではなく、ファイルの先頭にあります。「startOfData」は、書き込もうとしているセクターを示す定数です。
これが main です (上記の writeToData 関数は、以下の createroot 関数によって呼び出されます)。
私のディスク初期化機能:
c - これにより、意図的に無効なファイルの配置が行われ、エラーが発生しないのはなぜですか
したがって、100 バイトを含むバイナリ ファイルが与えられます。INVALID が原因でエラーが発生するはずだと確信していますが、そうでないのはなぜですか? INVALID に入るとセマンティック エラーが発生するのではないかと混乱しています。それとも私は何かを誤解していますか
c - Cプログラミングで一括更新する方法
製品リストでこのバッチ更新を行う必要があります。このバッチ更新では、データベース内からすべての製品を取得し、「注文数量」を取得する必要があります。次に、この「注文数量」を現在の在庫に追加する必要があります。
例:
現在の在庫: 100 注文中: 150
バッチ更新後は、次のようになります: 現在の在庫:250 注文中: 0
私はこの方法を実行しましたが (以下を参照)、実行すると、在庫も注文も更新されません。
fseek (pfp, -STRUCTSIZE,SEEK_CUR); を使用してみました。しかし、それは私のプログラムを無限ループに変えました。また、データベース内のすべての製品を表示しようとすると、最初のレコードがスキップされ、最後のレコードのみが表示される無限ループに入りました。システムからproducts.datファイルを削除して、もう一度やり直す必要があります。
なにか提案を?fseek() に何か問題があると思います。
前もって感謝します
c - fseek() を使用して、ユーザーが入力した位置を見つける
ユーザーに ID 番号を尋ね、関数fseek()
を使用してユーザーが入力した ID 番号の位置を見つけ、レコードを変更できるようにする必要があります。私はこのようなものを持っています:
c - Windows物理ドライブアクセスfopenおよびfseek
現在、Cでバイナリデータのストリームとして物理ハードディスクにアクセスしようとしています。イメージ(.img)をマウントし、OS(Win 7)から読み取ることができます。
私のCプログラムは、物理ドライブを読み取り専用バイナリモードで開こうとし、ドライブからデータを読み取ろうとします。
ただし、どこも検索せずにストリームからデータを読み取るだけで、すべてがうまくいき、ドライブに格納されているデータが返されます。ストリームのオフセット0にいるので、MBRを読み取ることができます。ディスク上。
fseek
ただし、原点(ゼロ)からオフセットしようとすると、 fseek
-1を返し、それができなかったことを示します。
これは、物理ディスクへのアクセスに関するアクセス許可/リング3 /ユーザーレベルの問題である可能性があると推測しています。これを行うには、カーネルレベルのアクセスを取得するためにドライバーを作成する必要があります。なぜできるのか、混乱しています。最初のセクターからいくつかのデータをうまく読み取りますが、他のオフセットを探すことはできません。以下に書いたCプログラムの一部を含めました。
c - ファイルからカンマ区切りの数値を C の多次元配列に読み込む方法
次のように、カンマ区切りの数値でファイルに整数の配列を作成する関数を作成したいと思います。
最初の列は各行の番号なので、実際に必要なデータは次の 3 つの列です。
私の問題は次のとおりです。
- 配列の次元がわからないので、最初に最後の行の最初の数字を読み取る必要があります。どうやってするか?fseek を使用してファイル ポインターをファイルの末尾にポイントし、前の '\n' を見つけようとしましたが、カンマの処理方法がわかりません。
- 行数を取得した後、必要なデータを N_row*3 配列に読み込むにはどうすればよいですか? コンマと '\n' の扱い方
事前にご協力いただきありがとうございます。
c - printfは、フォーマット文字列に\nを追加します
私はCでarunixコマンドのバージョンを構築しようとしています。私は冗長な出力に取り組んでおり、そのほとんどをカバーしています。ただし、ファイルを読み、ファイル名をフォーマット文字列に入れると、秘密の改行がポップアップし続けます。
このコードは、次のような出力を生成します。
ファイル名が新しい行にある理由がわかりません。それは私を殺しています。きちんとシークしていないのではないかと思いましたが、シークを1バイト上げると名前が途切れてしまうので、そうは思いません。
また、ボーナスとして、その8進数をUNIXファイルのパーミッションに簡単に変換する方法を誰かが知っているとしたら、私はうれしくなります(つまり、-rw-rw-rw)
c - fseekでタブをオフセットすることは可能ですか?
アーカイブファイルのヘッダーを解析しようとしていますが、タブをスキップする必要があります。私はfseek()
これを行うために使用しようとしてきましたが、それが可能かどうかさえ判断できません。
構文が正しくないことは確かですが、例を次に示します。
fseek(stream, (long)"\t", SEEK_CUR);
ファイルをスキップして各ヘッダーからファイル名を引き出す必要があるため、メソッドを使用してファイルポインターを移動する必要があります(アーカイブの内容のテーブルを作成します)。
c - fseek, fread, return ポインタ (C) のバイナリファイル関数が正しく動作しない
ファイルから読み取った構造へのポインターを返したい (基本的にデータを出力するだけの別の関数に移動する) 関数は int sem を介して (シリアル番号 -1) を取得し、設定するfseek で読み取りたい構造体の先頭へのファイル ポインターを取得し、単純に構造体全体を読み取ってポインターを返します。(例: ファイルに書かれている構造体の数が 5 で、4 番目の構造体を読みたい場合、関数が取得する sem 値は 3 であり、fseek ポインターを使用すると、最初の 3 つの構造体をスキップし、関数は最初の 3 つの構造体を読み込んで返します。構造 no.4)。sem 値が 0 の場合は正常に動作しますが、他の構造を探すとうまくいきません。何が悪いのかわからない!ヘルプ?:)
構造の定義:
そして、問題がここにある場合にデータを出力する関数: