2012-05-09 5 views
1

Как добавить/добавить текст в начало существующих данных в текстовом файле. В основном мне нужно предоставить заголовок перед этими данными в текстовом файле. Этот заголовок является динамическим. Обратите внимание, что эти данные поступают из внешнего источника или пакета SQL или откуда-то. Итак, после получения данных в текстовом файле, я хочу предоставить текст заголовка с запятой, разделенной в существующих записях/данных текстового файла.Как добавить заголовок в текстовый файл

Я выборочные данные в текстовом файле, как показано ниже:

123,"SAV","CBS123",2010-10-10 00:00:00 
456,"CUR","CBS456",2012-02-01 00:00:00 

Заголовок текста в Prepend:

HDR<TableName><DateTime> 

Выход мне нужно, как показано ниже: TableName: счета DateTime: 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

Прочтите код, который вы написали, чтобы прочитать файл. – shahkalpesh

+0

** ПРИМЕЧАНИЕ: ** Привет, я получил результат, который мне нужен. Но мне нужно в VB6.0. Пожалуйста, помогите и на этом языке .... – venkat

+0

Попробуйте преобразовать поставляемый код C# в VB6 самостоятельно, и если вы застряли на каком-то преобразовании, начните новый вопрос для этого –

ответ

8

Обратите внимание, что вы не можете технически «вставить» в файл и имеют все содержимое «сдвиг» вниз. Лучшее, что вы можете сделать, это прочитать файл и переписать его с помощью новой строки. Вот один из способов сделать это эффективно:

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) или подобно тому, как это необходимо.

+0

Примечание, в отличие от других, мы не читайте все в памяти. Зависит от того, что вам нужно. – yamen

+0

Кажется излишне сложным – bsara

-2

Вы можете сделать это в обратном порядке 1-го ансвера, сначала сначала напишите заголовок в текстовом файле, затем откройте этот текстовый файл в режиме добавления, а затем верните данные. Для открытия файла в режиме добавления используйте следующее код строки:

FileStream aFile = new FileStream(filePath, FileMode.Append, 
    FileAccess.Write);  
    StreamWriter sw = new StreamWriter(aFile);  
    sw.Write(text);   
    sw.Close();  
    aFile.Close(); 
+0

Половина вопроса об управлении, чтобы сделать это «на месте», так что вам нужна обработка и перемещение временного файла. Мой ответ делает то же, что и ваш, концептуально (сначала напишите заголовок, затем напишите), но рассмотрит остальную часть вопроса и не откроет файл дважды без каких-либо оснований. – yamen

+0

Но в вашем случае вам нужно явно удалить временный файл. –

+0

И как вы планируете делать это без временного файла? – yamen

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))) 
+0

Как я могу добиться того же в VB6.0 ?? – venkat

+0

ПРИМЕЧАНИЕ: Привет, я получил результат с вашим кодом, который мне нужен. Но мне нужно в VB6.0. Пожалуйста, помогите и на этом языке .... – venkat

1
String[] headerLines = new String[]{"HDR<TableName><DateTime>"}; 
String filename = "1.txt"; 
var newContent = headerLines.Union(File.ReadAllLines(filename)); 
File.WriteAllLines(filename, newContent); 
-1

VB6 перевод ответа Ямен'S. Воздушный код! Я не скомпилировал это, тем более бегу это!

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 
+0

И вот какой код найти временную папку. Просто бросьте этот класс от Карла Петерсона. http://vb.mvps.org/samples/SysFolders/ – MarkJ

Смежные вопросы