Using .NET methods for working with file contents will usually be faster than the PowerShell cmdlets, because they have a lot of overhead etc. (Look at this performance comparison)
Here's a short and simple version:
$path = (Get-Item .\myfile.csv).FullName
$contents = [System.IO.File]::ReadAllText($path)
Set-Content -Path $path -Value "address;name"
[System.IO.File]::AppendAllText($path, $contents)
Here is another possible example, which will process one line at a time, and not read the entire text at once, so it's easier on your memory.
# your original file
$instream = New-Object System.IO.StreamReader "c:\test\myfile.csv"
# new temporary file
$outstream = New-Object System.IO.StreamWriter "c:\test\myfile2.csv"
# write the header
$outstream.WriteLine("address;name")
# write remaining contents
foreach ($line in $instream.ReadLine()) {
$outstream.WriteLine($line)
}
$instream.Dispose()
$outstream.Dispose()
# replace the old file
Remove-Item "c:\test\myfile.csv"
Rename-Item "c:\test\myfile2.csv" "myfile.csv"