Tailコマンドを書いてみました。[ファイル名]というとても単純なものです。sample.txtのように入力します。行数を省略した場合は、最後の10行が表示されます。標準入力からの入力となるようにしました。RingBufferクラスTailコマンドを作成するために、リングバッファークラス(RingBuffer)を自作しました。RingBufferクラスは、リング状になった配列のような構造をしています。格納できるのは、配列と同様、一定の量だけで、それを超えてデータを格納しようとすると、先頭に戻ってデータを格納する構造になっています。Wikipediaに説明がありますので、リングバッファについての詳しい説明は割愛します。{とジェネリッククラスにしているので、用途にあった型のデータを入れることができます。実装していますので、foreachで簡単に要素を取り出すことができます。この実装では、取り出した要素はバッファから削除していますので、同じ要素を複数回バッファーの中から取り出すことはできません。いった動きをIEnumerable<T>として実装しても良いの?という疑問も頭をよぎりますが、まあ良しとしましょう。簡単な使い方を示します。Console.WriteLine(s);}このコードを実行すると、以下のように最後に追加した4つの文字列が表示されます。333333444444555555666666RingBufferクラスのソースコードはこの記事の最後に掲載しています。Tailコマンドを実装するコードはこの後に掲載しているので、それと合わせて読んで欲しいのですが、このプログラムの実質的なメイン部分は、DoTailメソッドです。最後まで読み終わったら、RingBufferの中身をforeachで書き出す」という、とてもシンプルなコードになっています。Mainメソッドでごにょごにょやってるのはコマンドパラメータの解析なので、本質部分ではありません。シンプルなコードとなったのは、RingBufferクラスの存在が大きいですね。複雑なコードを書かないといけなくなってしまいますし、デバッグも大変です。一般的なRingBufferのインターフェースが良くわからないので、僕なりのインターフェースとしました。他の用途で利用するには、機能不足のところもあるかもしれません。除去したくない場合もあると思います。そのような場合は、新たなメソッドを追加する必要があります。Tailコマンドでの利用だけを考えた場合は、オーバースペックの部分があります。いった汎用クラスの設計がなかなか難しいものです。GitHubで公開しています。Pageで公開したものを加筆・修正したものです。upLoginユーザーは見つかりませんでした。