var App = App || {};
App = {
getDataFromServer: function(){
var self = this,
deferred = $.Deferred(),
requests = [];
requests.push($.getJSON('request/ajax/url/1'));
requests.push($.getJSON('request/ajax/url/2'));
$.when.apply(jQuery, requests).done(function(xhrResponse) {
return deferred.resolve(xhrResponse.result);
});
return deferred;
},
init: function(){
this.getDataFromServer().done(_.bind(function(resp1, resp2) {
// Do the operations which you wanted to do when you
// get a response from Ajax, for example, log response.
}, this));
}
};
App.init();
Используйте это вместо:
new StreamWriter("c:\\file.txt", true);
С этой перегрузкой конструктора StreamWriter вы выбираете, добавляете ли вы файл или перезаписываете его.
C # 4 и выше предлагает следующий синтаксис, который некоторые находят более читаемыми:
new StreamWriter("c:\\file.txt", append: true);
using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(something);
}
Другим вариантом является использование System.IO.File.AppendText
Это эквивалентно перегрузкам, которые другие передали StreamWriter.
Также File.AppendAllText может дать немного более легкий интерфейс, не беспокоясь об открытии и закрытии потока. Хотя вам может понадобиться, чтобы потом беспокоиться о том, чтобы вставить свои собственные линии. :)
Заменить это:
StreamWriter file2 = new StreamWriter("c:/file.txt");
с помощью этого:
StreamWriter file2 = new StreamWriter("c:/file.txt", true);
true
указывает, что он добавляет текст.
Предполагаю, что вы выполняете все вышеуказанного кода каждый раз, когда вы что-то пишете в файл. Каждый раз, когда поток для файла открывается, его указатель поиска позиционируется в начале, поэтому все записи в конечном итоге переписывают то, что было до этого.
Вы можете решить проблему двумя способами: либо с удобным
file2 = new StreamWriter("c:/file.txt", true);
или путем прямого позиционирования указателя потока:
file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);
Используйте этот конструктор StreamWriter
со вторым параметром - true
.
Попробуйте следующее:
StreamWriter file2 = new StreamWriter(@"c:\file.txt", true);
file2.WriteLine(someString);
file2.Close();
Заменить эту строку:
StreamWriter sw = new StreamWriter("c:/file.txt");
с помощью этого кода:
StreamWriter sw = File.AppendText("c:/file.txt");
, а затем записать вашу строку в текстовый файл следующим образом:
sw.WriteLine("text content");
На самом деле только ответ Джона (сент. 5'11 в 9:37) с BaseStream.Seek работал для моего дела. Спасибо, Джон! Мне нужно было добавить строки в zip-архив txt-файл.
using (FileStream zipFS = new FileStream(@"c:\Temp\SFImport\test.zip",FileMode.OpenOrCreate))
{
using (ZipArchive arch = new ZipArchive(zipFS,ZipArchiveMode.Update))
{
ZipArchiveEntry entry = arch.GetEntry("testfile.txt");
if (entry == null)
{
entry = arch.CreateEntry("testfile.txt");
}
using (StreamWriter sw = new StreamWriter(entry.Open()))
{
sw.BaseStream.Seek(0,SeekOrigin.End);
sw.WriteLine("text content");
}
}
}
Еще один простой способ - использовать File.AppendText
, он добавляет кодированный текст UTF-8 к существующему файлу или к новому файлу, если указанный файл не существует и возвращает System.IO.StreamWriter
using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt"))
{
sw.WriteLine("this is a log");
}