Я предполагаю, что что-то меняет рабочий каталог вашего процесса, скорее всего, ваш код в процессе. Обратите внимание, что документация содержит следующее:
Если параметр lpFileName не содержит полный путь и имя файла для файла, WritePrivateProfileString выполняет поиск файла в каталоге Windows. Если файл не существует, эта функция создает файл в каталоге Windows.
Теперь я предполагаю, что это применимо, если вы указываете только имя файла. Поскольку имя вашего файла начинается с .
, я считаю, что это заставит функцию запускаться из текущего рабочего каталога.
Сказав все это, и неважно, в чем причина проблемы, вы должны использовать полный путь, чтобы убедиться, что файл записан там, где вы хотите, чтобы он был записан. Всякий раз, когда вы хотите, чтобы файл находился в определенном каталоге, всегда проще принудительно использовать это, используя полные пути.
Вы можете найти путь к вашему исполняемому файлу, используя Application.ExecutablePath
, а затем удалить часть имени файла.
Еще одно замечание: тот же каталог, что и исполняемый файл, может быть неправильным выбором. Если ваша программа установлена в каталоге Program Files, то каталог, в котором находится исполняемый файл, будет недоступен для записи. Я думаю, вы должны рассмотреть возможность использования каталога в профиле пользователя. Найдите одно из значений Environment.SpecialFolder
.