Söker ett elegantare sätt att sätta samman ett antal textfiler (loggar) till en fil. Det finns inga andra sätt att att göra det på än att läsa från ena och skriva till andra, inte vad jag vet i alla fall. Lite OT: Det "snyggaste" sättet hade varit att gå till filsystemet, och skapa en "symbolisk kopia" eller vad fan det brukar kallas. En kopia som är delad fram tills någon vill göra en ändring (har för mig att det är vanligt i minnesarkitekturer), och sen låta operativsystemet göra själva kopian. Att det går att göra i .NET är dock något mer osannolikt. =) <b>sätta samman ett antal textfiler (loggar) till en fil.</b> Härligt Marcus! <code> Det fick bli att använda ett os shell i alla fall.Sökes: Elegant sätt att slå samman textfiler
Elegantare än att läsa och skriva rad för rad eller att anropa ett shell med "fil2.txt >> fil1.txt"Sv: Sökes: Elegant sätt att slå samman textfiler
Du kan öppna upp två filestream, sätta positionen på den du vill skriva till till filstorleken, alltså fil1.position = fil1.length (eventuellt till fil1.length - 1).
Därefter kan du köra fil2.WriteTo(fil1). Är inte säker på om WriteTo funktionen finns i .NET 1.0, men den finns i vissa strömmar i .NET 2.0 i alla fall.
Det är nog det enklaste sättet jag kan komma på i kod.Sv:Sökes: Elegant sätt att slå samman textfiler
(Och min gissning är att NTFS inte har stödet, utan snarare berkleys snabba filsystem i så fall...) Sv: Sökes: Elegant sätt att slå samman textfiler
Enklaste sättet är att använda sig av dos-prompten.
<code>
copy *.txt sammanslaget.txt
</code>
Detta kommer att ta alla .txt-filer som finns i den aktuella katalogen och kopiera innehållet till sammanslaget.txt.Sv:Sökes: Elegant sätt att slå samman textfiler
Det va ett tag sen man dos:ade,
men detta va ju vekligen smutt....Sv:Sökes: Elegant sätt att slå samman textfiler
copy *.txt sammanslaget.txt
</code>
Om man vill bestämma ordningen själv så gör man
copy fil1.txt+fil2.txt+fil3.txt sammanslaget.txtSv: Sökes: Elegant sätt att slå samman textfiler
Går fort iaf.
<code>
Dim sr As New StreamWriter("c:\padata\merge.bat")
Dim sFiles As String()
Try
sFiles = Directory.GetFiles("C:\padata\", "*.log")
sr.Write("copy ")
For iI As Integer = 0 To sFiles.GetUpperBound(0)
sr.Write(sFiles(iI))
If iI = sFiles.GetUpperBound(0) Then Exit For
sr.Write("+")
Next
sr.WriteLine(" c:\padata\out.log")
Catch e As Exception
LogException(e)
Finally
sr.Close()
End Try
Dim SP As New Process
Try
SP.StartInfo.FileName = "C:\PAData\merge.bat"
SP.StartInfo.UseShellExecute = True
SP.StartInfo.CreateNoWindow = True
SP.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
SP.Start()
SP.WaitForExit()
Catch e As Exception
LogException(e)
Finally
SP.Dispose()
File.Delete("c:\padata\merge.bat")
End Try
</code>