Более быстрый способ узнать, существует ли пользователь в системе?

Вы можете переключиться с массива на std::vector и использовать

std::vector<T*> v(SIZE);

Значения будут инициализированы с помощью NULL с. Это предпочтительный способ C ++.


Обновление: начиная с C ++ 11, есть еще один способ: использование

std::array<T*, SIZE> array = {};

Это ведет себя больше как исправленная версия массива в стиле C (в частности, избегает динамического распределения) , переносит его размер вокруг и не затухает до указателя. Размер, однако, должен быть известен во время компиляции.

8
задан Peter Mortensen 14 June 2014 в 21:51
поделиться

3 ответа

.NET 3.5 поддерживает новые классы запросов AD в пространстве имен System.DirectoryServices.AccountManagement .

Для его использования , вам необходимо добавить «System.DirectoryServices.AccountManagement» в качестве ссылки И добавить оператор using .

using System.DirectoryServices.AccountManagement;


using (PrincipalContext pc = new PrincipalContext(ContextType.Machine))
{
    UserPrincipal up = UserPrincipal.FindByIdentity(
        pc,
        IdentityType.SamAccountName,
        "UserName");

    bool UserExists = (up != null);
}

<.NET 3.5

Для версий .NET до 3.5, вот чистый пример, который я нашел в dotnet-snippets

DirectoryEntry dirEntryLocalMachine =
    new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");

bool UserExists =
    dirEntryLocalMachine.Children.Find(userIdentity, "user") != null;
22
ответ дан 5 December 2019 в 05:56
поделиться

Вы хотите использовать DirectorySearcher.

Примерно так:

static bool userexists( string strUserName ) {
    string adsPath = string.Format( @"WinNT://{0}", System.Environment.MachineName );
    using( DirectoryEntry de = new DirectoryEntry( adsPath ) ) {
        try {
            return de.Children.Find( strUserName ) != null;
        } catch( Exception e ) {
            return false;
        }
    }
}

Это должно быть быстрее. Кроме того, вы можете уменьшить свойства, если все, что вы делаете, это проверка на существование.

5
ответ дан 5 December 2019 в 05:56
поделиться

Следующее сообщение в командной строке возвращает 1, если «имя пользователя» существует:

net user | найти "имя пользователя" / c

1
ответ дан 5 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: