FileStreamを用いたCP/CAPコマンド
95 FileStreamCPCAP 動作確認 Delphi2007 更新日 2010/06/23(水)

コマンドラインから使えるファイルアクセスプログラムを書いてみました。

作成するときは
[新規作成]-[コンソールアプリケーション]を選択してdprファイルを編集するか
[プロジェクト]-[オプション]-[リンカ]
-[Exe/DLLオプション]-[コンソールアプリケーション]にCheckをいれておきましょう。


CPコマンドは、ファイルコピーコマンド
CAPコマンドは、画面出力コマンドです。


◆UNIXのコピーコマンドCPと同じDCP.exe
コマンドラインから

    C:\>DCP File1.txt File2.txt

とするとFile1.txtの内容がFile2.txtにコピーされます。

───────(DCP.dpr)───────
program DCP;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  infs, outfs: TFileStream;
  b: Byte;
begin
  if (ParamCount=2) and (ParamStr(1)<>'') and (ParamStr(2)<>'') then
  begin
    infs := TFileStream.Create(ParamStr(1), fmOpenRead);
    outfs:= TFileStream.Create(ParamStr(2), fmCreate);

    while (infs.Read(b, SizeOf(Byte))=SizeOf(Byte)) do
      outfs.Write(b, SizeOf(Byte));
    {上記2行は以下のように1行で置き換えられる}
//    outfs.CopyFrom(infs, infs.Size);

    infs.Free;
    outfs.Free;
  end;
end.
────────────────────

◆UNIXのCATコマンドと同じDCAT.exe
コマンドラインから

    C:\>DCAT File1.txt File2.txt File3.txt

とするとFile1/2/3.txtの内容を連続して画面に出力します。


    C:\>DCAT File1.txt File2.txt File3.txt > File4.txt

とするとOSのリダイレクション(>のこと)機能により
File4.txtにFile1/2/3.txtの内容が結合して入ります。

StringListを使っているため
テキストファイルで使う時しか正しい動作はしないでしょう。

───────(DCAT.dpr)───────
program DCAT;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  infs: TFileStream;
  SL: TStringList;
  i, j: Integer;
begin
  if (ParamCount>=1) then
  begin
    SL := TStringList.Create;

    for j := 1 to ParamCount do
    begin
      infs := TFileStream.Create(ParamStr(j), fmOpenRead);

      SL.LoadFromStream(infs);

      for i := 0 to SL.Count-1 do
      begin
        Writeln(SL.Strings[i]);
      end;
      infs.Free;
    end;

    SL.Free;
  end;
end.
────────────────────
FileStreamを使った理由は Insider.NET の記事を元にしているからです。


参考────────────────────
> Insider.NET > C#プログラミングTips > ファイル入出力の基礎 
http://www.atmarkit.co.jp/fdotnet/csharptips/005file/005file.html