問題タブ [file]
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# でファイルやフォルダーをすばやく圧縮または解凍する良い方法を知っている人はいますか? 大きなファイルの処理が必要になる場合があります。
windows - Windowsのデフォルトよりも優れたファイルコピーの代替手段は何ですか?
私は自分のコンピューターに何百ものランダムなファイルをコピーする必要があり、Windowsに組み込まれているバニラファイルのコピーを使用することにかなり不安を感じています。
「本当によろしいですか?」「本当によろしいですか?」、「zipファイルでも?」、「読み取り専用ファイルでもありません!」にぶら下がってほしくありません。離れるとすぐにループします。
何時間も動作させてから予期せず停止したくない:「誰かがこのファイルを開いたことがあるので、コピーしません!」次に、コピー全体をキャンセルするか、何が行われ、どの作業が残っているかを示さずに終了します。
どのファイル管理プログラムを使用したことがありますか?どちらをお勧めしますか?
この質問は、他の質問に関連しています。新しいSATA専用コンピュータで古いPATAハードディスクドライブを使用するにはどうすればよいですか。
c# - CSVファイルを.Netの強く型付けされたデータ構造にインポートします
CSVファイルを強く型付けされたデータ構造にインポートする最良の方法は何ですか?
language-agnostic - バイナリ ファイル レイアウトのリファレンス
バイナリ ファイルのレイアウト構造に関する優れた情報源はどこにありますか?
BTrieve
インデックス ファイルを取得したり、ヘッダーを解析したりしたい場合MP3
、信頼できる情報はどこで入手できますか?
java - Java を使用して、アクティブに書き込み中のファイルから読み取るにはどうすればよいですか?
ファイルに情報を書き込むアプリケーションがあります。この情報は、アプリケーションの成功/失敗/正確性を判断するために実行後に使用されます。これらの成功/失敗/正確性のチェックをリアルタイムで実行できるように、ファイルが書き込まれているときにファイルを読み取れるようにしたいと考えています。
これは可能だと思いますが、Java を使用する際の落とし穴は何ですか? 読み取りが書き込みに追いついた場合、ファイルが閉じられるまでさらに書き込みを待つだけですか、それともこの時点で読み取りが例外をスローしますか? 後者の場合、私は何をしますか?
私の直感は現在、私を BufferedStreams に向かわせています。これは行く方法ですか?
c# - C# でのバイナリ パッチの生成
C# でのバイナリ パッチ生成アルゴリズムの実装を持っている、または知っている人はいますか?
基本的に、2 つのファイル ( oldとnewで指定) を比較し、古いファイルをアップグレードして新しいファイルと同じ内容にするために使用できるパッチ ファイルを作成します。
実装は比較的高速で、巨大なファイルを処理する必要があります。O(n) または O(logn) ランタイムを示す必要があります。
私自身のアルゴリズムは、お粗末 (高速だが巨大なパッチを生成する) または遅い (小さなパッチを生成するが O(n^2) ランタイム) 傾向があります。
実装のためのアドバイスや指針があればいいでしょう。
具体的には、この実装は、1 つのマスター サーバーを持つさまざまな大きなデータ ファイルに対してサーバーの同期を維持するために使用されます。マスター サーバーのデータファイルが変更されると、いくつかのオフサイト サーバーも更新する必要があります。
私が作成した最も単純なアルゴリズムは、メモリに保持できるファイルに対してのみ機能します。次のとおりです。
- 古いファイルから最初の 4 バイトを取得し、これをキーと呼びます
- これらのバイトを辞書に追加します。ここで、key -> position、positionは、これらの 4 バイトを取得した位置であり、最初は 0 です
- これらの 4 バイトの最初をスキップし、別の 4 バイト (3 重複、1 1) を取得し、同じ方法で辞書に追加します。
- 古いファイルのすべての 4 バイト ブロックに対して、手順 1 ~ 3 を繰り返します。
- 新しいファイルの先頭から4 バイトを取得し、辞書で調べます。
- 見つかった場合は、2 つのファイルのバイトを比較して、複数ある場合は最長の一致を見つけます。
- 古いファイルでその場所への参照をエンコードし、新しいファイルで一致したブロックをスキップします
- 見つからない場合は、新しいファイルから 1 バイトをエンコードし、スキップします
- 新しいファイルの残りの部分について、手順 5 ~ 8 を繰り返します。
これは、ウィンドウ処理を行わない圧縮に似ているため、大量のメモリを使用します。ただし、コード出力を最小限に抑えようとする限り、かなり高速で、非常に小さなパッチが生成されます。
よりメモリ効率の良いアルゴリズムはウィンドウ処理を使用しますが、はるかに大きなパッチ ファイルを生成します。
上記のアルゴリズムには、この投稿では省略したニュアンスが他にもありますが、必要に応じて詳細を投稿できます。ただし、まったく別のアルゴリズムが必要であると感じているため、上記のアルゴリズムを改善しても、おそらく十分ではありません。
編集#1:上記のアルゴリズムのより詳細な説明は次のとおりです。
まず、2 つのファイルを結合して、1 つの大きなファイルを作成します。2 つのファイル間のカットポイントを覚えておいてください。
次に、4 バイトを取得し、その位置をファイル全体のすべてのディクショナリ ステップに追加します。
3 番目に、新しいファイルの開始位置から、既存の 4 バイトの組み合わせを探してループを実行し、最長の一致を見つけます。古いファイルの位置、または新しいファイルの現在の位置より前の位置のみを考慮するようにしてください。これにより、パッチの適用中に古いファイルと新しいファイルの両方でマテリアルを再利用できます。
編集#2:上記のアルゴリズムのソースコード
証明書に問題があるという警告が表示される場合があります。それを解決する方法がわからないので、当面は証明書を受け入れます。
ソースは、ライブラリの残りの部分から他の多くの型を使用しているため、必要なのはファイルだけではありませんが、それがアルゴリズムの実装です。
@lomaxx、xdeltaと呼ばれるsubversionで使用されるアルゴリズムの優れたドキュメントを見つけようとしましたが、アルゴリズムの仕組みをまだ知らない限り、見つけたドキュメントは私が知る必要があることを教えてくれません。
それとも、私は単に密集している... :)
いただいたサイトのアルゴリズムをざっと見てみましたが、残念ながら使えません。バイナリ差分ファイルからのコメントは次のように述べています。
最適な差のセットを見つけるには、入力サイズに対して二次時間が必要になるため、すぐに使用できなくなります。
ただし、私のニーズは最適ではないため、より実用的なソリューションを探しています。
答えてくれてありがとう、必要に応じて彼のユーティリティにブックマークを追加しました。
編集#1:注意してください、私は彼のコードを見て、いくつかのアイデアを見つけることができるかどうかを確認します。また、後で質問をメールで送信しますが、彼が参照している本を読みましたが、解決策は良いです最適なソリューションを見つけるには、時間がかかるため実用的ではありません。
編集#2:私は間違いなくpython xdeltaの実装を追い詰めます。
java - Java アプリケーションにファイルをロードするにはどうすればよいですか?
Java アプリケーションにファイルをロードするにはどうすればよいですか?
c++ - C ++でファイルを開くにはどうすればよいですか?
C ++の方法で、読み取り用にファイルを開きたい。私はそれをすることができる必要があります:
ある種の読み取り行機能を含むテキストファイル。
バイナリファイル。生データを
char*
バッファに読み込む方法を提供します。
c - Cでファイルのサイズをどのように決定しますか?
ファイルのサイズをバイト単位で把握するにはどうすればよいですか?
c - Cでディレクトリリストを取得するにはどうすればよいですか?
Cでフォルダーとファイルのディレクトリをどのようにスキャンしますか? クロスプラットフォームである必要があります。