如何在文本文件中预先添加/附加现有数据的文本。 基本上我需要在文本文件中提供此数据之前的标题。此标头是动态数据。请注意,此数据来自外部源或SQL包或来自某个地方。因此,在文本文件中获取数据之后,我想在文本文件的现有条目/数据中提供以逗号分隔的标题文本。
我在文本文件中对数据进行采样,如下所示:
123,"SAV","CBS123",2010-10-10 00:00:00
456,"CUR","CBS456",2012-02-01 00:00:00
标题文字为Prepend:
HDR<TableName><DateTime>
输出我需要如下: TableName:帐户 日期时间: 2012-05-09 12:52:00
HDRAccount2012-05-09 12:52:00
123,"SAV","CBS123",2010-10-10 00:00:00
456,"CUR","CBS456",2012-02-01 00:00:00
请帮助我如何在VB6.0,C#.NET
两种语言中使用相同的语言答案 0 :(得分:9)
请注意,您无法在技术上“插入”文件并让所有内容“移位”。你能做的最好就是读取文件并用新行重写。这是有效实现这一目标的一种方法:
static void InsertHeader(string filename, string header)
{
var tempfile = Path.GetTempFileName();
using (var writer = new StreamWriter(tempfile))
using (var reader = new StreamReader(filename))
{
writer.WriteLine(header);
while (!reader.EndOfStream)
writer.WriteLine(reader.ReadLine());
}
File.Copy(tempfile, filename, true);
File.Delete(tempfile);
}
致this answer这个想法的信用,但改进得足以让它值得单独发布。
现在,如果您想要接受表名和日期时间的内容,只需将其添加为第二个函数:
static void InsertTableHeader(string filename, string tableName, DateTime dateTime)
{
InsertHeader(filename,
String.Format("HDR{0}{1:yyyy-MM-dd HH:MM:ss}",
tableName,
dateTime));
}
因此,只需根据需要调用InsertHeader(filename, "Account", DateTime.Now)
或类似内容。
答案 1 :(得分:2)
var fn = @"c:\temp\log.csv";
var hdr1 = "Account";
var hdr2 = "2012-05-09 12:52:00";
System.IO.File.WriteAllText(fn, System.String.Format("HDR {0} {1}\n{2}", hdr1, hdr2, System.IO.File.ReadAllText(fn)))
答案 2 :(得分:1)
String[] headerLines = new String[]{"HDR<TableName><DateTime>"};
String filename = "1.txt";
var newContent = headerLines.Union(File.ReadAllLines(filename));
File.WriteAllLines(filename, newContent);
答案 3 :(得分:-1)
VB6翻译衙门的答案。空气代码!我没有编译这个,更不用说了 它!
Sub InsertHeader(ByVal filename As String, ByVal header As String)
Dim tempfile As String
Dim readUnit As Integer
Dim writeUnit As Integer
tempfile = "c:\tempfile" '' TODO generate better temporary filename -
'' here is a link to help with getting path of temporary directory
'' http://vb.mvps.org/samples/SysFolders
readUnit = FreeFile
Open filename For Input As #readUnit
writeUnit = FreeFile
Open tempfile For Output As #writeUnit
Print #writeUnit, header
Do Until Eof(readUnit)
Dim nextLine As String
Line Input #readUnit, nextLine
Print #writeUnit, nextLine
Loop
Close readUnit
Close writeUnit
Kill filename
FileCopy tempfile, filename
Kill tempfile
End sub
答案 4 :(得分:-2)
你可以按照第一个问题的相反顺序进行,意思是首先在文本文件中写入标题,然后在追加模式下打开该文本文件然后用数据打开...用于在附加模式下打开文件使用下面的代码行:
FileStream aFile = new FileStream(filePath, FileMode.Append,
FileAccess.Write);
StreamWriter sw = new StreamWriter(aFile);
sw.Write(text);
sw.Close();
aFile.Close();