# encoding: ascii
# api: powershell
# title: Unix Out-File
# description: Write line to file with Unix Line Endings
# version: 0.1
# type: function
# author: Bruno Martins
# license: CC0
# function: Out-UnixFile
# x-poshcode-id: 6308
# x-archived: 2016-04-22T21:36:10
# x-published: 2016-04-18T17:44:00
#
#
function Out-UnixFile
{
    Param(

        [Parameter( Mandatory = $True )]
        [string]
        $FilePath,

        [Parameter( Mandatory = $True, ValueFromPipeline = $True )]
        [string[]]
        $InputObject,

        [switch]
        $Append = $False
    )

    BEGIN
    {
        $Fs = $Null
        $Sw = $Null
        
        Try
        {
            If( -not( Test-Path $FilePath ) )
            {
                $result = New-Item -Path $FilePath -ItemType File -ErrorAction Stop
            }

            $Encoding = New-Object System.Text.UTF8Encoding

            If( $Append )
            {
                $FileMode = [System.IO.FileMode]::Append
            }
            Else
            {
                $FileMode = [System.IO.FileMode]::Open
            }

            $Fs = New-Object -TypeName System.IO.FileStream( $FilePath, $FileMode )
            $Sw = New-Object -TypeName System.IO.StreamWriter( $Fs, $Encoding )
        }
        Catch
        {
            Throw
        }
    }

    PROCESS
    {

        Try
        {
            ForEach( $Line in $InputObject )
            {
                $Sw.Write( "$( $line )`n" )
            }
        }
        Catch
        {
            If( $Sw -ne $Null )
            {
                $Sw.Close()
            }

            If( $Fs -ne $Null )
            {
                $Fs.Close()
            }

            Throw
        }
    }

    END
    {
        $Sw.Close()
        $Fs.Close()
    }
}
