Как добавить данные в существующий файл - PullRequest
4 голосов
/ 15 января 2020

В Chapel мы можем открыть файл для записи, используя open() + iomode.cw, например,

var fout = open( "foo.dat", iomode.cw );   // create a file for writing
var cout = fout.writer();                  // make a channel
cout.writeln( 1.23 );
cout.close();
fout.close();

или создав канал на openwriter() как

var cout = openwriter( "foo.dat" );
cout.writef( "n = %10i, x = %15.7r\n", 100, 1.23 );
cout.close();

, но, похоже, нет опции, соответствующей режиму "добавления" (на странице IO ). Это в настоящее время не предусмотрено, и если да, есть ли какой-нибудь идиоматический c способ открыть файл и добавить данные?

1 Ответ

4 голосов
/ 15 января 2020

Режим добавления для ввода-вывода не поддерживается с версии 1.20. Пока он не поддерживается, вы можете использовать следующие обходные пути:

// Open a file for reading and writing
var fout = open("foo.dat", iomode.rw);

// Position a writing channel at the end of the file
var cout = fout.openAppender();

cout.writeln(1.23);

cout.close();
fout.close();

/* Create a writer channel with a starting offset at the end of the file */
proc file.openAppender() {
  var writer = this.writer(start=this.length());
  return writer;
}

В выпусках Chapel GitHub есть запрос на открытую функцию для режима добавления. См. Вопрос # 9992 для получения дополнительной информации.

...