タグ付けされた質問 「file-handling」

ファイル処理とは、ファイルおよびファイルハンドルを操作するための一連のツール、関数、およびライブラリを指します。ファイルの作成、書き込み、追加、移動、および削除は、このドメインに分類されます。

12
大きなファイル(10 MB)をデータベースに保存するのは悪い習慣ですか?
現在、ユーザーが1 MB〜10 MBのサイズのファイルを保存および共有できるWebアプリケーションを作成しています。 データベースにファイルを保存すると、データベースアクセスが大幅に遅くなるように思えます。 これは有効な懸念事項ですか?ファイルシステムにファイルを保存し、データベースにファイル名とパスを保存する方が良いでしょうか?データベースを操作する際のファイルの保存に関連するベストプラクティスはありますか? 私はこのプロジェクトでPHPとMySQLを使用していますが、ほとんどの環境(Ruby on Rails、PHP、.NET)およびデータベース(MySQL、PostgreSQL)で同じ問題があります。

8
「\ n」と「\ r \ n」の違い
はい、はい、'\n'UNIXには改行を書くのに対して、Windowsには次の2つの文字シーケンスがあります'\r\n'。これはすべて理論上非常に良いことですが、私の質問はなぜですか?Windowsで復帰文字が余分なのはなぜですか?UNIXがそれを行うことができる場合\n、Windowsがこれを行うのに2文字を要するのはなぜですか? 私はデビッド・ビーズリーのPython本を読んでいて、彼はこう言っています: たとえば、Windowsでは、文字「\ n」を書き込むと、実際には2文字のシーケンス「\ r \ n」が出力されます(ファイルを読み戻すと、「\ r \ n」は単一の「\ n」に変換されますキャラクター)。 なぜ余分な努力が必要なのですか? 私は正直になります。私は長い間違いを知っていましたが、なぜ尋ねるのを悩ませたことはありません。今日はそれが答えられることを願っています。 御時間ありがとうございます。

6
一時ファイルは/ tmpまたは現在の作業ディレクトリに保存する必要がありますか?
一時ファイルを生成する必要があるプログラムがあります。クラスタマシン用に書かれています。 これらのファイルをシステム全体の一時ディレクトリ(例:)に保存すると/tmp、一部のユーザーは、/ tmpへの適切なアクセス権がないためにプログラムが失敗したと訴えました。しかし、これらのファイルを作業ディレクトリに保存すると、それらのユーザーは、これらの不思議なファイルを見たくないと不満を漏らしました。 どちらがより良い習慣ですか?に保存するの/tmpが正しいアプローチであると主張し、失敗を「意図したとおりに動作する」として防御する必要があります(つまり、適切な許可/アクセスを管理者に依頼します)。

5
開くファイル名を渡すべきですか、それともファイルを開くべきですか?
テキストファイルを処理する関数があるとします。たとえば、テキストファイルから読み取り、単語 'a'を削除します。ファイル名を渡して関数の開始/終了を処理するか、開いたファイルを渡して、それを呼び出す人がそれを閉じることに対処することを期待できます。 最初の方法は、ファイルが開いたままにならないことを保証するより良い方法のように思えますが、StringIOオブジェクトのようなものを使用することを防ぎます 2番目の方法は少し危険です-ファイルが閉じられるかどうかを知る方法はありませんが、ファイルのようなオブジェクトを使用することができます def ver_1(filename): with open(filename, 'r') as f: return do_stuff(f) def ver_2(open_file): return do_stuff(open_file) print ver_1('my_file.txt') with open('my_file.txt', 'r') as f: print ver_2(f) これらのいずれかが一般的に好まれていますか?一般に、関数はこれらの2つの方法のいずれかで動作すると予想されますか?または、プログラマーが関数を適切に使用できるように、適切に文書化する必要がありますか?

3
一時的な場所に書き込み、それを目的の場所にコピーすることの利点は何ですか?
私は衛星画像で動作するアプリケーションを書いていますが、上司からいくつかの商用アプリケーションを見て、その動作を確認するように頼まれました。奇妙な振る舞いを見つけたので、探していたとき、他の標準的なアプリケーションでもそれを見つけました。 これらのプログラムは、まずtempフォルダーに書き込み、次にそれを目的の宛先にコピーします。 例:7zipはまずtempフォルダーに抽出し、次にデータを抽出するように要求した場所に抽出したデータをコピーします。 このアプローチにはいくつかの問題があります。 一時フォルダーには十分なスペースがない場合がありますが、目的の場所にはそのようなスペースがある場合があります。 大きなファイルの場合、コピー操作に無視できない時間がかかることがあります。 私はそれについて多くを考えましたが、これを行うための単一の肯定的なポイントを見ることができませんでした。私は何かを逃していますか、これを行うことには本当の利点がありますか?

4
フロントエンドとバックエンド間のトランスポートとしてフラットファイルとデータベース/ APIを使用する
数人の開発者の間で議論がかなり白熱したアプリケーションがあります。 基本的に、Webレイヤーとバックエンドレイヤーに分割されます。Webレイヤーは単純なWebフォームによって情報を収集し、このデータをJSONドキュメント(文字列は.jsonファイル)としてバックエンドが使用する監視フォルダーに格納します。バックエンドは数秒ごとにこのフォルダーをポーリングし、ファイルを取得して、その機能を実行します。 ファイル自体は非常にシンプル(つまり、すべての文字列データ、ネストなし)で、最大で1〜2kで、システムはほとんどの時間をアイドル状態にします(ただし、最大100メッセージまでバーストします)。バックエンド処理ステップは、メッセージごとに約10分かかります。 議論は、ある開発者がファイルシステムをメッセージングレイヤーとして使用することは悪いソリューションであると示唆した場合、リレーショナルデータベース(MySQL)、noSQLデータベース(Redis)、またはプレーンREST APIコールなどを代わりに使用する必要がある場合に出てきます。 Redisは、キュー内のメッセージ処理のために組織内の他の場所で使用されることに注意してください。 私が聞いた議論は次のように分類されます フラットファイルを支持して: フラットファイルは、他のソリューションよりも信頼性が高くなります。ファイルは、「監視」フォルダーから、取得後に「処理」フォルダーに、最後に「完了」フォルダーに移動するためです。とにかく他のものを壊すような非常に低レベルのバグがない限り、メッセージが消えるリスクはありません。 フラットファイルを理解するには、それほど高度な技術は必要ありません- catそれだけです。書き込むクエリはありません。誤ってメッセージをキューからポップして、メッセージが永遠に消えてしまうリスクはありません。 ファイル管理コードは、すべての言語の標準ライブラリの一部であるため、プログラミングの観点からデータベースAPIよりも簡単です。これにより、コードベースの全体的な複雑さと、導入する必要のあるサードパーティコードの量が削減されます。 YAGNI原則州フラットファイルが今うまく動作することを、それを残して、より複雑なソリューションに変更するための実証され必要はありません。 データベースを支持して: ファイルがいっぱいのディレクトリよりもデータベースを拡張する方が簡単です フラットファイルには、誰かが「完了」ファイルを「監視」ディレクトリにコピーして戻すリスクがあります。このアプリケーションの性質(仮想マシン管理)により、これにより壊滅的なデータ損失が発生する可能性があります。 T / Sにより高度な技術を必要とするアプリは、教育を受けていないスタッフが物事を突くだけで何かを台無しにする可能性が低いことを意味します。 特にRedisなどのDB接続コードは、少なくとも標準ライブラリファイル管理機能と同じくらい堅牢です。 DB接続コードは、ファイル操作よりもレベルが高いため、開発者の観点からは(機能的にではないにしても)明らかに単純です。 私が見ることができることから、両方の開発者は多くの有効なポイントを持っています。 これら2人のプロファイル開発者、またはプロデータベース開発者のうち、どちらがソフトウェアエンジニアリングのベストプラクティスに沿っているのでしょうか?

1
ファイルリーダーをテストするにはどうすればよいですか?
私はいくつかのファイル形式のプロジェクトに取り組んでいます。一部の形式は.xsdsによって指定され、他の形式はそれぞれのWebサイトのドキュメントによって指定され、一部はドキュメントのないカスタムの社内形式です。ムワハハハハ。 どうしたの? ファイルリーダーをテストしたいと思いますが、これを実行する方法が完全にはわかりません。アプリケーションのフローは次のとおりです。 file.___ ===> read by FileReader.java ===> which creates a Model object どこFileReaderインタフェースがあります public interface FileReader { public Model read(String filename); } Modelファイルが読み込まれたときに移入された属性の数を持っています。次のように見えます public class Model { List<String> as; List<String> bs; boolean isAPain = true; // ... } 私は何を試しましたか? 私の唯一のアイデアは、各ファイル形式のファイル「ジェネレーター」を作成することでした。これらのジェネレーターは基本的に、いくつかの変数(たとえば、ファイルで生成するコメントの数)を受け取り、サンプルファイルを出力してから読み込み、結果Modelを最初にファイルの生成に使用した変数と比較するビルダーです。 ただし、これにはいくつかの問題があります。 生成されるファイルは、実際のファイルのようには見えません。ジェネレーターはコンテキストをまったく認識しません。 私が手動で変数を設定しているので、ジェネレータがエッジケース用に生成したかどうかを認識するのは困難です。この方法は、1ダースのサンプルファイルを作成するよりもましです。 これを行うためのより良い方法はありますか? 編集:それは私が実際に意味するものなので、ユニットを統合に変更しました。 EDIT2:これは私が言及したエッジケースの例です。 各ファイルは、頂点とエッジで構成されるグラフを表します。これらの頂点とエッジはさまざまな方法でアタッチできます。 v1 …

7
コピーされたファイルが元のファイルと同一であるかどうかを確認するために、すべての単一バイトを読み取る必要がありますか?
最近、Total Commanderというプログラムを知りました。これはWindows Explorerの代替品であり、ファイルをコピーするための独自のものがあります。ファイルが同一であるかどうかをチェックするために、CRCを計算する代わりに、オリジナルとコピーの両方で1バイトずつ文字通りチェックします。 私の質問は:これは必要ですか?CRCや他のそのような技術はうまくいかないのでしょうか?あなたは、プログラマーとして、この完璧であるが遅いシステムを試して実装すべきでしょうか、それとも極端すぎますか?

7
区切りファイルを処理する最良の方法
したがって、通常、CSVファイルでは、フィールドと行の区切り文字としてカンマと戻り文字が使用されます。 これにより、これらの両方の文字を含む可能性のあるテキストで明らかな問題が発生します。 明らかにオプションがありますが(エスケープ)、これをどのように処理しますか?別の文字を使用してください-パイプまたはチルダ?それらをエスケープしますか?区切りファイルを使用しないでください。結局のところ、2010年であり、現在XMLがありますか? 問題が見当たらないまともなチャンスを求めて、少なくとも努力をしています。 (明らかに、これはより堅固なものではなく、好奇心からの質問です-私は何度も何度もデータを使って遊んでいますが、常にそれを回しましたが、通常は少し、よく、汚い感じがします他の人の経験は何だろうと思いました)。

5
アップロードされた画像に名前を付けるためのベストプラクティスは何ですか?
ユーザーがプロフィール写真をアップロードできるフォームがWebアプリケーションにあるとします。 ファイルサイズ、サイズなどに関する要件はほとんどありませんが、ユーザーが画像をアップロードするときに、システム上でどのように名前を付ける必要がありますか?一貫性があり、一意である必要があると思います。 多分GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg タイムスタンプ? 129899740140465735.jpg ハッシュ?例:md5 b1a9acaf295cf14ffbc5b6538294562c.jpg これを行うための標準的な方法または推奨される方法はありますか?

5
テスト駆動開発:ファイルシステム操作をテストするための良い/受け入れられた方法ですか?
私は現在、ファイルシステムの内容に基づいて(特に)テーブルを生成し、見つかったものに対してメタデータの変更を行うプロジェクトに取り組んでいます。問題は、これをどのようにテストするのか、セットアップするのかです。これを簡単にモックする方法はありますか?または、「サンドボックス」を設定する必要がありますか?

1
データとファイルの混合転送にmultipart / form-dataを使用するのはなぜですか?
私はC#で作業しており、作成中の2つのアプリ間で通信を行っています。Web APIとJSONが好きになりました。現在、2つのサーバー間でテキストデータとファイルを含むレコードを送信するルーチンを作成しています。 インターネットによると、ここに示すようにmultipart / form-dataリクエストを使用することになっています。 SO質問「C#クライアントからのマルチパートフォーム」 基本的に、次のような形式に従ってリクエストを手動で記述します。 Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-disposition: form-data; name="field1" Joe Blow --AaB03x content-disposition: form-data; name="pics"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x-- RFC 1867-HTMLでのフォームベースのファイルアップロードからコピー この形式は、優れたJSONデータに慣れている人にとって非常に苦痛です。したがって、明らかに解決策は、JSONリクエストを作成し、Base64でファイルをエンコードして、次のようなリクエストで終わることです。 { "field1":"Joe Blow", "fileImage":"JVBERi0xLjUKJe..." } そして、好きな場所でJSONのシリアル化と逆シリアル化を利用できます。さらに、このデータを送信するコードは非常に簡単です。JSONシリアル化用のクラスを作成し、プロパティを設定するだけです。ファイル文字列プロパティは、いくつかの簡単な行で設定されます。 using (FileStream fs = File.Open(file_path, FileMode.Open, FileAccess.Read, FileShare.Read)) { byte[] file_bytes = …

3
異なるバージョンのソフトウェア間でファイルの後方互換性を許可するための優れた設計とは何ですか?
異なるバージョンのソフトウェア間でファイルタイプの後方互換性を許可するための優れた設計とは何ですか? たとえば、Microsoftはどのようにして2007、2010、2013などの単語をすべての開いているdocxファイルに取得しますが、異なるエディションではより多くの/少ないデータを保存し、わずかに異なる方法でデータをすべて同じファイルタイプに保存できますあるバージョンで保存されたファイルは別のバージョンで開くことができますが、ファイルの特定の要素は古いバージョンでは使用できない可能性がありますか? つまり、それを行うための本当に明白な方法は、 private string openfile(string filename) { File.Open(filename) ... some logic that gets a header from the file that will never change switch (fileversion) case 2007: ..... case 2010 ..... case 2013 ..... } しかし、それは信じられないほどモノリシックで、あまり拡張性がなく、多くのコピー/貼り付けコードにつながる可能性があります。 だから私は、ファイルに存在する必要があるヘッダーなどの不変の構造、およびシリアル化/逆シリアル化に必要なメソッドを定義するすべてのバージョンのベースインターフェイスを使用することを考えていましたインターフェースを実装する新しいバージョンのクラスは古いバージョンを継承し、ファイルがほとんど同じであるため、変更されたもののみをオーバーライドします。 ファイルの構造についてはあまり気にしません。XMLを使用することは既に決まっているので、最初のスキーマは概して決定済みです。ただし、将来的には間違いなく変更されることになるので、これらの変更に容易に対応できるようにコードを設計できるようにしたいだけです。

3
ファイルの最初に、最後だけ知っているものを書き込む
背景: EBMLファイルを書き込むマイクロコントローラーCコードを書いています。EBMLは要素がネストされたバイナリXMLに似ていますが、開始タグと終了タグの代わりに、開始ID、長さ、そしてデータがあります。低電力アプリケーションの外部フラッシュにこれを書き込んでいるので、フラッシュアクセスを最小限に抑えたいと思います。決して簡単なことはないので、メモリも制限されます。 EBML要素全体をメモリに保持できる場合、その長さがわかったら、各要素の長さに戻って入力できるため、生成は簡単です。問題は、要素全体をメモリに保持できない場合の対処方法です。私が見るオプションは: 私が知っていることを書いてから、戻って長さを追加します(最も簡単ですが、必要以上にフラッシュアクセスを追加します) 書き始める前に各要素の長さを計算します(比較的簡単ですが、プロセッサ時間は長くなります) メモリがいっぱいになったらモードを切り替えて、データを調べ続けますが、すでにメモリに予約されている要素の長さを計算するだけです。次に、メモリにあるものを書き込み、戻って、中断したところからデータの処理を続けます。(これまでのところ私のお気に入りのオプション) 要素を書き込む必要があり、最終的な長さがまだわからない場合は、要素に最大または最悪の場合の長さを指定します。(上記より簡単ですが、裏目に出てスペースを無駄にする可能性があります) 質問:これは、人々が考えていた比較的一般的な問題であるように思われます。一部のデータパケットを形成するときにも発生する可能性があることを知っています。私がここで見逃している/より一般的/より受け入れられたより良いテクニックはありますか?または、私が検索できる問題のいくつかの用語?

3
ファイルから設定をどこにロードして保存するのですか?
この質問は、ファイルから設定をロードするほとんどのプログラムに当てはまると思います。私の質問はプログラミングの観点からです、そしてそれは実際にさまざまなクラスとアクセシビリティの観点からファイルから設定のロードを処理する方法です。例えば: プログラムに単純なsettings.iniファイルがある場合、その内容をload()クラスのメソッド、またはおそらくコンストラクタにロードする必要がありますか? 値をpublic static変数に格納する必要がありますか、それともstaticプロパティを取得および設定するメソッドが必要ですか? ファイルが存在しないか、読み取りできない場合はどうなりますか?プログラムの残りの部分に、それらのプロパティを取得できないことをどのように知らせますか? 等 私はここの正しい場所でこれを求めていることを願っています。私はできるだけ質問を言語にとらわれないようにしたかったのですが、私は主に継承のようなものを持つ言語、特にJavaとC#.NETに焦点を合わせています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.