Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64

Запилить функцию вывода на экран адреса директории, из которой запущен экземпляр cmd.exe

22.12.2014, 19:20. Показов 1006. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Фрагмент кода:
C++
1
2
3
4
5
6
...
system("md temp");                 //создаем в папке, из которой запущена консоль, папку "temp"
ofstream F("temp\\file.txt");      //создаем в папке "temp" наш файлик, в который мы что-то выводим
...
cout << "Что-то сохранено в ...\\file.txt\".";     //на месте пропуска должен быть путь к нашему файлику
...
Педовикия нам разъясняет, что "Переменная окружения ... в Windows используются для хранения текстовых строк пользователя и информации о настройках операционных систем". Далее: "CD - ... - Указывает путь к текущему каталогу. Идентична команде CD без аргументов". Я проверил:
C++
1
2
3
...
system("@echo %CD%") //это действительно выводит адрес директории, из которой запущена консолька
...
Но эту команду не получается вывести в строке между слов (ее перекидывает на предыдущую строку, а на месте, где она прописана, ничего нет).
Вопрос: можно ли что-то сделать с моим методом и какие есть еще вариации на эту тему? (Где-то была похожая статья, но предложенные ответы не дали должного результата.)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2014, 19:20
Ответы с готовыми решениями:

Javascript-код для вывода дерева элементов страницы, с которой этот код запущен
Всем привет. Возникла трудность при изучении javascript, а именно с темой, связанной с DOM. Не могу справиться со следующей задачей:...

Получить адрес текущей директории в которой находиться текущий файл *.exe
Всем привет! Подскажите апишку для получения адреса директории в которой находиться текущий файл *.exe P.S (аналог аргумента argv в...

Запилить функцию-аллюзию на функцию switch(), принимающую буквенные значения
Фрагмент кода: ... int fu; cout &lt;&lt; &quot;Сделать что-то? (1=да, 2=нет) &quot;; //здесь предполагается введение не цифры, а буквы Y или N cin...

8
0 / 0 / 6
Регистрация: 22.12.2014
Сообщений: 25
22.12.2014, 19:29
В WinApi есть функция GetCurrentDirectory

Работать с ней можно примерно так:

C++
1
2
3
4
5
6
7
8
const char* getCurrentDir() {
    // Массив TCHAR для хранения имени текущей папки
    TCHAR* thisDir = new TCHAR[MAX_PATH];
    // Получить адрес текущей папки и записать в переменную
    GetCurrentDirectory(MAX_PATH, thisDir);
    // Преобразовать из TCHAR[] к char[] и вернуть 
    return static_cast<const char*>(thisDir);
}
0
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
22.12.2014, 20:23  [ТС]
C++
1
const char* getCurrentDir() {...
- на const подчеркивает ошибку о недопустимости использования имени типа. Может, нужны какие-то инклуды?
0
0 / 0 / 6
Регистрация: 22.12.2014
Сообщений: 25
22.12.2014, 20:28
Цитата Сообщение от Иван_Богданов Посмотреть сообщение
C++
1
const char* getCurrentDir() {...
- на const подчеркивает ошибку о недопустимости использования имени типа. Может, нужны какие-то инклуды?
Странно. Дополнительные инклюды для const то, ерунда. Возможно какие-то особенности компилятора. Код рабочий и используется в проекте.
Нужен windows.h только.

Попробуйте переписать без const, например.

C++
1
2
3
4
5
6
7
8
char* getCurrentDir() {
    // Массив TCHAR для хранения имени текущей папки
    TCHAR* thisDir = new TCHAR[MAX_PATH];
    // Получить адрес текущей папки и записать в переменную
    GetCurrentDirectory(MAX_PATH, thisDir);
    // Преобразовать из TCHAR[] к char[] и вернуть 
    return static_cast<char*>thisDir;
}
0
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
22.12.2014, 22:05  [ТС]
Без const в первой строчке подчеркивает { после getCurrentDir() с требованием поставить точку с запятой, инклуд windows.h имеется, компилятор от микромягкого Visual Studio 2010, OS Win7 (такое ощущение, что компилятор не понимает, что нужно делать с самой функцией getCurrentDir()). Какие еще варианты?

Добавлено через 11 минут
О, проблема неожиданно разрешилась: на оффсайте микромягкого к функции GetCurrentDirectory() есть пояснения: "Requirements - ... - Header - WinBase.h (include Windows.h)"

Добавлено через 36 минут
Ан нет: теперь компилятор покрывает трехэтажным матом этот инклуд WinBase.h: 182 ошибки, среди них отсутствие спецификатора типа и неопределенные идентификаторы. Странно, даже в этой проге...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <WinBase.h>
#include <windows.h> 
#include <iostream>
#include <clocale>
using namespace std;
 
int main()
{setlocale(LC_ALL, "Russian");
 
const char* getCurrentDir(){
    TCHAR* thisDir = new TCHAR[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, thisDir);
    return static_cast<const char*>(thisDir);
}
 
system("pause");
    return 0;
}
...компилятор выплевывает кучу ошибок, связанных с первым инклудом, и поэтому "fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции"
0
0 / 0 / 6
Регистрация: 22.12.2014
Сообщений: 25
22.12.2014, 22:16
Иван_Богданов, ты пытаешься описать функцнию внутри тела другой функции. Конечно это не сработает

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <windows.h>
#include <iostream>
 
using namespace std;
 
const char* getCurrentDir(){
    TCHAR* thisDir = new TCHAR[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, thisDir);
    return static_cast<const char*>(thisDir);
}
 
int main() {
 
    cout << "Current dir: " << getCurrentDir();
    _getch();
}
0
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
22.12.2014, 23:17  [ТС]
Исправил: теперь как у вас, но в 9 строке компилятор жалуется на недопустимое преобразование типа в static_cast.

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <windows.h> 
#include <iostream>
#include <conio.h>
using namespace std;
 
const char* getCurrentDir(){
    TCHAR* thisDir = new TCHAR[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, thisDir);
    return static_cast<const char*>(thisDir); ///!!!ERROR: Недопустимое преобразование типа!!!\\\
}
 
int main() {
     cout << "Current dir: " << getCurrentDir();
    _getch();
    return 0;
}
Вот как он оправдывается: код.cpp(9): error C2440: static_cast: невозможно преобразовать "TCHAR *" в "const char *"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции.
0
0 / 0 / 6
Регистрация: 22.12.2014
Сообщений: 25
22.12.2014, 23:26
Иван_Богданов, используйте в проекте многобайтовую кодировку для представления символов. Инструкция для Visual Studio выглядит примерно так:
Project Properties -> General, здесь внизу есть настройка Character Set, изменить её параметр с Unicode на Multi-byte Character Set
0
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
23.12.2014, 15:44  [ТС]
О, спасибо, теперь что-то появилось, но это что-то в виде китайской азбуки - теперь нужно преобразовать кодировку консоли в читаемый вид. Какой номер этой кодировки (если с помощью system("chcp ..."))? Если поставить любой юникод (65000 или 65001), то вместо русских букв в имени пути появится пустота.

Добавлено через 7 минут
Уже не надо: просто нужна была русификация...
C++
1
2
3
4
#include <clocale>
...
setlocale(LC_ALL, "Russian");
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 15:44
Помогаю со студенческими работами здесь

вирус calc.exe*32 notepad.exe*32 cmd.exe cannhost.exe
Здравствуйте. помогите решить проблему. При включении компьютера висят процессы calc.exe*32 notepad.exe*32 cmd.exe cannhost.exe. Завершаю...

Прочитать список всех запущенных Exe и проверить, запущен ли Exe
Всем привет . Помогите с кодом как Прочитать список всех запущенных Exe и проверить, запущен ли Exe Буду Благодарен так как на Delphi...

как запилить функцию
есть функция function F(x:real):real; begin F:=2*x; end; как мне сделать так чтобы чтобы с формы можно было изменять...

Для вывода матрицы на экран использовать рекурсивную функцию вывода одной строки матрицы
Рекурсивная функция в С++. срочно! ДЛЯ вывода матрицы на экран построчно использовать РЕКУРСИВНУЮ функцию вывода на экран одномерного...

Написать функцию,выводящую на экран (файл) имена файлов в текущей директории
,выводящую на экран (файл) имена файлов в текущей директории ,выводящую на экран (файл) имена файлов в текущей директории по заданной...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru