かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

暇なので手抜きheadコマンドをC#で

using System;
using System.IO;
using System.Linq;

namespace head
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!args.Any())
            {
                Usage();
                return;
            }

            string fileName = null;
            int lineNumber = 10;

            if (args.Length == 1)
            {
                fileName = args[0];
            }

            if (args.Length == 3)
            {
                if (args[0] != "-n")
                {
                    Usage();
                    return;
                }

                if (!int.TryParse(args[1], out lineNumber))
                {
                    Usage();
                    return;
                }

                fileName = args[2];
            }

            if (!File.Exists(fileName))
            {
                // ファイル無い
                return;
            }

            foreach (var line in File.ReadLines(fileName).Take(lineNumber))
            {
                Console.WriteLine(line);
            }
        }

        private static void Usage()
        {
            Console.WriteLine("usage head filename or head -n N filename");
        }
    }
}

-nにしか対応していません。コマンドライン引数のパース処理ってめんどくさいですね…。NuGetでさくっと何かライブラリ入れて片づけてしまいたい。