Это может сделать так при неявно или явной установке выравнивания структуры. Структура, которая выравнивается 4, будет всегда кратной 4 байтам, даже если бы размер ее участников был бы чем-то, что это не несколько 4 байта.
Также библиотека может быть скомпилирована под x86 с 32-разрядным ints, и можно выдерживать сравнение, его компоненты на 64-разрядном процессе были бы давать Вам различный результат при выполнении этого вручную.
Возможно, это будет хорошим решением: учитывая, является ли это Vista / Win7 или XP, и без использования переменных среды:
string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName;
if ( Environment.OSVersion.Version.Major >= 6 ) {
path = Directory.GetParent(path).ToString();
}
Хотя использование переменной среды гораздо более понятно.
Попробуйте:
System.Environment.GetEnvironmentVariable("USERPROFILE");
Изменить:
Если версия .NET, которую вы используете, 4 или выше, вы можете использовать Перечисление Environment.SpecialFolder
:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Environment.GetEnvironmentVariable("userprofile")
Попытка перейти вверх из именованной папки SpecialFolder чревата проблемами. Существует множество причин, по которым папки не будут там, где вы ожидаете - пользователи могут перемещать их самостоятельно, объект групповой политики может перемещать их, перенаправление папок на пути UNC и т. Д.
Использование переменной среды ] для профиля пользователя должна отражать любую из этих возможных проблем.
Попробуйте:
System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/
Возиться с переменными среды или жестко заданными смещениями родительских папок никогда не будет хорошей идеей, когда есть API для получения нужной информации, вызовите SHGetSpecialFolderPath (..., CSIDL_PROFILE , ...)