Перейти к содержанию
Fire Monkey от А до Я
  • 0

System.IOUtils.TFile.WriteAllText потокобезопасная процедура?


Евгений Корепов

Вопрос

Рекомендуемые сообщения

  • 0
  • Модераторы

А в чем проблема? Обычно в доп. потоках использую TStringStream пока проблем не было ни на одной платформе

Ссылка на комментарий
  • 0

Да, потокобезопасный "классовый" метод. Однако, в связи с соседней темой есть важные дополнения:

1. этот метод не записывает преамбулу.

2. Для записи используется кодировка UTF8

3. Метод создает файл с эксклюзивным доступом к нему. Пока метод работает, попытка достучаться до файла (например из другого потока) провалится с выбросом исключения.

 

Кроме того - нежелательно пользоваться методом TFile.AppendAllText без явного указания кодировки (буквально недавно здесь и здесь  была куча споров. Жалко, половину комментариев потерли...)

Изменено пользователем kami
Ссылка на комментарий
  • 0

Просто столкнулся с странной проблемой, на Android 4.4 запись WriteAllText в  System.IOUtils.TPath.GetHomePath работает с какими то перебоями. Такое ощущение что в ~2-3% случаев вызывается исключение. Точнее сказать не могу, сегодня обновлю приложение, добавлю отправку ошибок себе на сервер, тогда точно узнаю. Но других критических мест в коде нет, простой как три копейки.

Ссылка на комментарий
  • 0

Если мы рассматриваем исключительно этот метод, то еще раз хочу обратить внимание на п.3 моего предыдущего сообщения.

Немного детализируем:

Метод создает файл с эксклюзивным доступом к нему.

Это в том числе означает, что если файл уже существует в файловой системе и он кем-то открыт, то уже на данном этапе мы получим исключение.

 

Пока метод работает, попытка достучаться до файла (например из другого потока) провалится с выбросом исключения.

тут и так понятно.

 

Других мест потенциального возбуждения исключения на текущий момент не нашел.

Изменено пользователем kami
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...