Пути к дирректориям
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Вопрос может быть и глупый, но что-то я не понимаю
Как задать путь и дирректории где находится программа,
т.е. есть абсолютный путь c:\pojects\gpad\backup\...бла, бля?
Нужно оставить только \backup\...бла, бля(получается относительный чтоли)
Как задать путь и дирректории где находится программа,
т.е. есть абсолютный путь c:\pojects\gpad\backup\...бла, бля?
Нужно оставить только \backup\...бла, бля(получается относительный чтоли)
Усложнять - легко, упрощать - сложно
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Проблему обрисуй вначале, а то не понятно ничего. Вопроса ещё не задал, а уже варианты ответа предлагаешь 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Блин, я столько придумывал как правильно обрисовать вопрос не влезая в дебри... Видимо перестарался :/
Усложнять - легко, упрощать - сложно
Ладно...
Есть папка(1) с прогой, а в ней еще одна папка(2) для backup-ов базы...
Т.е. можно однозначно задать путь к (2) если (1) никогда не будет перемещаться... Как сделать, чтобы разбить такую тупую зависимость?
Есть папка(1) с прогой, а в ней еще одна папка(2) для backup-ов базы...
Т.е. можно однозначно задать путь к (2) если (1) никогда не будет перемещаться... Как сделать, чтобы разбить такую тупую зависимость?
Усложнять - легко, упрощать - сложно
Hup, все равно ни фига не понятно
Если ты о том, как, находясь в папка(1), задать путь к ее подпапке папка(2), то юзай такой синтаксис: ..\папка(2)

- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Точнее ".\папка(2)".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, прав, конечно. Рука дрогнула 

- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А вообще приёмов много. Всё зависит от того, что тебе требуется, Hup.
1. Хочу, чтобы папка с базой всегда была там, где и экзешник. В этом случае во избежения запуска приложения из другой папки (а такое можно сделать запросто, например в свойствах ярлыка) просто берём ту строчку, которая передаётся в WinMain и извлекаем оттуда путь к приложению. Потом конкатенируем с соответствующим относительным путём. (А ещё есть WinAPI, какая именно не помню, но найти не трудно, которая по дискриптору приложения возвращает путь к его запускному файлу).
2. Хочу, чтобы база всегда лежала в определённом месте, причём пользователь по своему желанию мог это место изменять (этот вариант мне больше нравится). Тогда храним строчку в реестре и обеспечиваем её изменение из приложения с помощью простенького UI.
1. Хочу, чтобы папка с базой всегда была там, где и экзешник. В этом случае во избежения запуска приложения из другой папки (а такое можно сделать запросто, например в свойствах ярлыка) просто берём ту строчку, которая передаётся в WinMain и извлекаем оттуда путь к приложению. Потом конкатенируем с соответствующим относительным путём. (А ещё есть WinAPI, какая именно не помню, но найти не трудно, которая по дискриптору приложения возвращает путь к его запускному файлу).
2. Хочу, чтобы база всегда лежала в определённом месте, причём пользователь по своему желанию мог это место изменять (этот вариант мне больше нравится). Тогда храним строчку в реестре и обеспечиваем её изменение из приложения с помощью простенького UI.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Хм... Romeo, я имел ввиду первый вариант
Усложнять - легко, упрощать - сложно
Romeo, все оказалось гораздо проще... Кстати я забыл упоминуть , что задача реализуется на C#
Вот решение
Ну и конечно:
Вот решение
Код: Выделить всё
using System.IO;
Код: Выделить всё
string path = Directory.GetCurrentDirectory();
Библиотека классов .NET Framework
Directory.GetCurrentDirectory -метод
Возвращает текущую рабочую папку приложения.
[Visual Basic]
Public Shared Function GetCurrentDirectory() As String
[C#]
public static string GetCurrentDirectory();
[C++]
public: static String* GetCurrentDirectory();
[JScript]
public static function GetCurrentDirectory() : String;
Возвращаемое значение
Строка, содержащая путь к текущей рабочей папке.
Исключения
Тип исключения Условие
UnauthorizedAccessException Вызывающий оператор не имеет необходимых прав доступа.
Примечания
Текущая папка отличается от исходной папки, из которой был запущен процесс.
Пример применения этого метода см. ниже в разделе «Пример». В приведенной ниже таблице содержатся примеры других типичных и сопутствующих задач ввода-вывода.
Действие… Раздел с примером…
Создание текстового файла. Запись текста в файл
Запись в текстовый файл. Запись текста в файл
Чтение из текстового файла. Чтение текста из файла
Просмотр файлов папки. Name
Просмотр вложенных папок в папке. GetDirectories
GetDirectories
Отображение всех файлов во всех вложенных папках в данной папке. GetFileSystemInfos
Поиск размера папки. Directory
Определение наличия файла. Exists
Определение наличия папки. Exists
Пример
[Visual Basic, C#, C++] В приводимом примере демонстрируется использование метода GetCurrentDirectory.
[C#]
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
// Get the current directory.
string path = Directory.GetCurrentDirectory();
string target = @"c:\temp";
Console.WriteLine("The current directory is {0}", path);
if (!Directory.Exists(target))
{
Directory.CreateDirectory(target);
}
// Change the current directory.
Environment.CurrentDirectory = (target);
if (path.Equals(Directory.GetCurrentDirectory()))
{
Console.WriteLine("You are in the temp directory.");
}
else
{
Console.WriteLine("You are not in the temp directory.");
}
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
void main() {
try {
// Get the current directory.
String* path = Directory::GetCurrentDirectory();
String* target = S"c:\\temp";
Console::WriteLine(S"The current directory is {0}", path);
if (!Directory::Exists(target)) {
Directory::CreateDirectory(target);
}
// Change the current directory.
Environment::CurrentDirectory = target;
if (path->Equals(Directory::GetCurrentDirectory())) {
Console::WriteLine(S"You are in the temp directory.");
} else {
Console::WriteLine(S"You are not in the temp directory.");
}
} catch (Exception* e) {
Console::WriteLine(S"The process failed: {0}", e);
}
}
Усложнять - легко, упрощать - сложно