Форум программистов, компьютерный форум CyberForum.ru

Использование функции GetUserName() - C++

Восстановить пароль Регистрация
 
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
25.12.2013, 22:35     Использование функции GetUserName() #1
Нужен пример программы, которая удаляет файл за адресом C:\Users\<имя_пользователя>\AppData\example.txt
Если можно наведите пример.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
25.12.2013, 22:40     Использование функции GetUserName() #2
А при чем здесь GetUserName ?
На системах до Windows Vista нет никаких "C:\Users", да и системный
диск может быть под буквой "D", например, и что тогда ?

Правильный способ - получить данный путь через функцию SHGetFolderPath
(CSIDL = CSIDL_MYDOCUMENTS), потом прибавить к нему имя файла и
вызвать DeleteFile.
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
25.12.2013, 22:56  [ТС]     Использование функции GetUserName() #3
Например?
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
25.12.2013, 23:13     Использование функции GetUserName() #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Удаляет файл example.txt из папки "Мои Документы":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <Windows.h>
#include <ShlObj.h>
 
 
 
int main()
{
    wchar_t *pBuffer = new wchar_t[1000];
    SHGetFolderPathW(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, pBuffer);
    lstrcatW(pBuffer, L"\\example.txt");
    DeleteFileW(pBuffer);
    delete[] pBuffer;
}
Для AppData нужно использовать другой CSIDL, какой именно - найдете в
документации к функции SHGetFolderPath:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
26.12.2013, 16:37  [ТС]     Использование функции GetUserName() #5
А чтобы дальше пройти от AppData нужно ввести продолжение?
Например:
C:\Users\<имя_пользователя>\AppData\New\example.txt

нужно ввести:
lstrcatW(pBuffer, L"\\New\\example.txt");
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
26.12.2013, 16:42     Использование функции GetUserName() #6
Да.
Кстати, вместо lstrcatW и работы с "сырым" буфером надежнее
использовать std::wstring.
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
26.12.2013, 18:22  [ТС]     Использование функции GetUserName() #7
Цитата Сообщение от Убежденный Посмотреть сообщение
Кстати, вместо lstrcatW и работы с "сырым" буфером надежнее
использовать std::wstring.
Можно пример, а то я в програмырованние под виндовс пока еще не очень
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
26.12.2013, 19:20     Использование функции GetUserName() #8
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Можно пример, а то я в програмырованние под виндовс пока еще не очень
Примеры без теории - ничто.
Читайте книжки по C++ и Win API, там все нужное есть.
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
26.12.2013, 19:32  [ТС]     Использование функции GetUserName() #9
Это понятно, но все же можно пример?
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
26.12.2013, 19:45     Использование функции GetUserName() #10
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Это понятно, но все же можно пример?
После вызова SHGetFolderPath можно присвоить строке std::wstring содержимое буфера.
А потом добавлять в нее остальные элементы пути (используя, например, оператор +).
Это лучше lstrcatW, так как нет опасности выхода за пределы буфера.
Код не привожу, он тривиален.
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
26.12.2013, 20:08  [ТС]     Использование функции GetUserName() #11
А как удалить целую папку?
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
26.12.2013, 20:11     Использование функции GetUserName() #12
SHFileOperation
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
26.12.2013, 20:41  [ТС]     Использование функции GetUserName() #13
Можно что-то конкретные?
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
27.12.2013, 12:16     Использование функции GetUserName() #14
Цитата Сообщение от ALEXKIRNAS Посмотреть сообщение
Можно что-то конкретные?
Все есть в документации (ссылка выше), ее нужно только прочесть.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.12.2013, 13:09     Использование функции GetUserName() #15
Цитата Сообщение от Убежденный Посмотреть сообщение
new wchar_t[1000];
Надеюсь, это только в качестве примера. Иначе у меня 2 вопроса:
1. Почему 1000?
2. Зачем выделение из кучи?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2013, 13:42     Использование функции GetUserName()
Еще ссылки по теме:

GetUserName пропадает значение C++
C++ GetUserName: вывод
Компилятор не находит функцию GetUserName C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14220 / 6235 / 988
Регистрация: 02.05.2013
Сообщений: 10,402
Завершенные тесты: 1
27.12.2013, 13:42     Использование функции GetUserName() #16
Цитата Сообщение от Tulosba Посмотреть сообщение
1. Почему 1000?
Просто как пример.
Правильнее было бы взять буфер длиной MAX_PATH, как следует из
документации, а затем загнать его в std::wstring и дальнейшие манипуляции
выполнять уже через строку.

Цитата Сообщение от Tulosba Посмотреть сообщение
2. Зачем выделение из кучи?
Это обобщенный подход. Большинство функций, которые работают с файловыми
путями, способны возвращать предельное для Windows количество символов,
это около 32 килознаков, т.е. порядка 64 Килобайт. Хранить такие буферы на
стеке не совсем безопасно.
Yandex
Объявления
27.12.2013, 13:42     Использование функции GetUserName()
Ответ Создать тему
Опции темы

Текущее время: 13:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru