С man-страницы:
Функция creat () должна вести себя так, как если бы она была реализована следующим образом:
blockquote>int creat(const char *path, mode_t mode) { return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode); }
Итак, файл открыт в режиме только для записи, и поэтому вы не можете читать.
Если вам нужно читать и писать, используйте
open(...)
непосредственно сO_RDWR
вместоO_WRONLY
.Указанное вами
0666
просто указывает права доступа к файловой системе, с которой создается файл.Если вы хотите просто выполнить обычный файловый ввод / вывод, вы также можете использовать высокоуровневые API, такие как
fopen
.
Я подозреваю, что это - потому что это пишет в StringBuilder, который является по сути UTF-16. Альтернатива для обхода этого должна создать класс, полученный из StringWriter, но который переопределяет свойство Encoding.
Я полагаю, что имею один в MiscUtil - но это довольно тривиально для записи так или иначе. Что-то вроде этого:
public sealed class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;
public StringWriterWithEncoding (Encoding encoding)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get { return encoding; }
}
}
A. Сетевая Строка кодируется в Unicode (UTF-16). Я ожидаю, что это - источник Ваших проблем кодирования, потому что Вы пишете в StringBuilder.