Любое решение, использующее FileExists
для выбора способа открытия файла, имеет условие состязания.Если существование файла изменяется между временем, когда вы его тестируете, и временем, когда вы пытаетесь открыть файл, ваша программа потерпит неудачу.Delphi не предоставляет способа решить эту проблему с помощью собственных процедур ввода / вывода файлов.
Если ваша версия Delphi достаточно новая, чтобы предложить ее, вы можете использовать TFile.Open
с открытым режимом fmOpenOrCreate
, который делает именно то, что вы хотите;он возвращает TFileStream
.
В противном случае вы можете использовать функцию Windows API CreateFile
, чтобы открыть файл.Задайте для параметра dwCreationDisposition
значение OPEN_ALWAYS
, что говорит о необходимости создания файла, если он еще не существует.