Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 02-09-2005 04:14 » |
|
Выбираю файл с компа в сети (рабочая группа компов, если это важно, одна и та же) при помощи диалога MFC класса CFileDialog. Если выбираю на компе, где запущена программа, то CFileDialog::GetPathName() цивильно выдаёт нормальный путь - например C:\Guard2\1.FDB
Если же выбираю на другом компе, то на разных машинах результат разный и, что смущает, НЕправильный.
то встретил два варианта:
\\NAME1\LABEL1 (C)\Guard2\1.FDB \\NAME2\Guard2\1.FDB
где NAME1,NAME2 - имя машин в сети, LABEL1 - метка диска C.
Мне же нужно получать строку (желательно автоматом) в таком виде:
\\NAME1\C\Guard2\1.FDB \\NAME2\C\Guard2\1.FDB
то есть в первом варианте - приходится убирать метку и скобки, а во втором - вообще дописывать диск!
как мне получить пути в нужном мне виде?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 05-09-2005 08:59 » |
|
ау
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #2 : 05-09-2005 11:39 » |
|
Хм....
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 05-09-2005 11:48 » |
|
вот-вот...
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #4 : 05-09-2005 13:35 » |
|
Алексей1153, ты в MSDN уже смотрел?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 05-09-2005 14:04 » |
|
Ну дык начинаем сначала - первый раз такое слышу: 1. Код? 2. "на разных машинах" - это на каких?
зы Ещё одно - каким образом получаешь доступ к сетевым ресурсам в диалоге? Ну например через $ ?
|
|
« Последнее редактирование: 05-09-2005 14:06 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 06-09-2005 04:48 » |
|
CString defname="";//имя по умолчанию
CFileDialog dlg(TRUE); dlg.m_ofn.lpstrFilter= "файл базы данных *.FDB (GUARD2)\0*.fdb\0" "файл базы данных *.GDB (GUARD1)\0*.gdb\0" "файлы *.FDB и *.GDB\0*.fdb; *.gdb\0" "все файлы\0*.*\0" "\0"; dlg.m_ofn.nFilterIndex=1; dlg.m_ofn.lpstrInitialDir=defname;//paths.BaseLastFullPath; dlg.m_ofn.lpstrTitle="Выбор файла базы данных";
if(dlg.DoModal()==IDOK) {
m_edEnterDbaseFullName=dlg.GetPathName(); UpdateData(FALSE); }
//m_edEnterDbaseFullName - результат , полное имя/путь файла
"на разных машинах" - это на двух рядом стоящих компах железо одинаковое, на обоих XP, единственное - возможно с разных дисков система была установлена "зы Ещё одно - каким образом получаешь доступ к сетевым ресурсам в диалоге? Ну например через $ ?" - не понял вопроса...
|
|
|
Записан
|
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #7 : 06-09-2005 06:13 » |
|
А что возвращает dlg.m_ofn.lpstrFile?
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 06-09-2005 06:57 » |
|
то же что и dlg.GetPathName()
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 06-09-2005 07:49 » |
|
не понял вопроса...
Я так думаю, что проблемма у тебя именно в этом - как расшарены ресурсы на другом компе например на сервере myserver на диске d: есть папка user1, расшаренная как MY_DAT, на локальном компе есть замапенный диск z - MY_DAT on MyServer (Z:) когда ты открываешь диалог, то видишь только "доступные ресурсы" типа замапенных дисков или расшаренных папок - \\myserver\MY_DAT - GetPathName возвращает \\myserver\MY_DAT\MyFile.txt MY_DAT on MyServer (Z:) - GetPathName возвращает z:\MY_DAT\MyFile.txt но можно также воспользоваться привелигерованным доступом, задавая его непосредственно в поле "имя файла": \\myserver\d$\user1\MyFile.txt - GetPathName возвращает \\myserver\d$\user1\MyFile.txt Честно говоря формат \\NAME1\LABEL1 (C)\Guard2\1.FDB я не видел, но может это ХРюшены штучки? Но факт остаётся фактом - диалог возвращает путь в любом из валидных форматов. Кстати, а зачем тебе это надо? Если собираешься дальше использовать, то какая разница как путь выглядит? Но в любом случае, чтобы решить проблемму тебе надо либо мапить удалённые ресурсы как локальный диск, либо использовать абсолютную адресацию на удалённом компе, для этого конечно надо обладать правами и диски на удалённом компе тоже должны быть расшарены.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 06-09-2005 08:19 » |
|
полный путь мне нужен для регистрации в реестре базы данных для юзанья через FireBird
если подключать по сети, тосимвольные пути не катят - пока не укажу название компа, диск,полный путь - не подключается
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #11 : 06-09-2005 08:48 » |
|
В Firebird есть файл aliases.conf. В этом файле можно указывать псевдонимы для баз данных. Например: Guard = C:\Guard2\1.FDB Далее вместо указания C:\Guard2\1.FDB при подключении можно будет просто указать Guard. Может быть это то, что надо?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 06-09-2005 09:48 » |
|
Chaa, нет, думаю это не подходит - больно неудобно -------------- А вообще, я подумал - может так и лучше? То есть если база открыта для чтения на сервере, то чел на клиенте должен указать полный путь (он просто должен его знать) , а иначе он прогу не запустит Так что может оно и к лучшему, хотя неприятный осадок остаётся...
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #13 : 06-09-2005 10:50 » |
|
А если ты на всех компах замапишь дисковод Z на C:\Guard2 то тогда у тебя путь всегда должен быть z:\1.FDB хотя... "FireBird мы не понимаем, ты давай цак вставляй" сорри
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 06-09-2005 12:32 » |
|
Джон, что есть "замапишь" ?
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #15 : 06-09-2005 12:46 » |
|
Он имеет в виду операцию, подобную subst
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #16 : 06-09-2005 14:13 » |
|
что есть "замапишь" ? Как ето есть по рюски... В эксплорере второй пункт меню справа, потом первый сверху. По косвенным данным это может по-аглицки называться типа network mapping, mapped to a shared network folder зы. baldr сорри - subst мы тоже не понимаем, может это оно и есть? только в профиль? Программно такие вещи можно делать с помощью WNetAddConnection2
|
|
« Последнее редактирование: 06-09-2005 14:20 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Chaa
|
|
« Ответ #17 : 07-09-2005 02:20 » |
|
Алексей1153, напиши поподробнее, какой путь тебе надо получить. Насколько я понял из поста #10, тебе для подключения к СУБД Firebird нужен локальный путь к этой базе данных на сервере. Или нет?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 07-09-2005 04:47 » |
|
Алексей1153, напиши поподробнее, какой путь тебе надо получить. Насколько я понял из поста #10, тебе для подключения к СУБД Firebird нужен локальный путь к этой базе данных на сервере. Или нет?
угу, нужен без всяких закорючек
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #19 : 07-09-2005 06:48 » |
|
Чтобы пользователь мог выбрать имя файла базы данных на сервере, ему нужно дать доступ через сеть к этому файлу, а чтобы получить полный путь, нужен доступ ко всему диску C: (или другому, но обязательно ко всему диску), что, конечно же, совсем ни к чему.
Путь первый, предпочтительный: Использовать файл aliases.conf. Находится обычно в C:\Program Files\Firebird\Firebird_1_5\aliases.conf. Добавляем в него строку Guard2 = C:\Guard2\1.FDB После этого при подключении к СУБД указываем вместо SERVER1:C:\Guard2\1.FDB указываем SERVER1:Guard2
Путь второй: Пользователи должны знать этот путь или должны иметь возможность получить его из изветсного им места.
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #20 : 07-09-2005 07:09 » |
|
Путь второй: Пользователи должны знать этот путь или должны иметь возможность получить его из изветсного им места. По-моему он это и пытается сделать через CFileDialog? А строку в файл глупый юзер добавлять не будет.
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 07-09-2005 07:18 » |
|
Chaa , это не совсем удобно, я уже говорил выше... "Пользователи должны знать этот путь или должны иметь возможность получить его из изветсного им места." - о да! )) baldr, "А строку в файл глупый юзер добавлять не будет." да в принципе он никуда не денется, но не в файл а в диалог ... Но за поддержкой будет звонить мне ------------ вообще-то в большинстве случаев путь надо 1 раз указать - потом он сохраняется в реестре.. Так что может сойдёт и так
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #22 : 07-09-2005 07:29 » |
|
"Глупый юзер" и не должен строки в файл писать. aliases.conf это конфигурационный файл СУБД, хранится на сервере. При создании новой БД в него надо один раз добавить строку - псевдоним.
Если честно, то непонтяно, почему все-таки это неудобно?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #23 : 07-09-2005 08:03 » |
|
мне кажется это не гибко
и как потом очистить этот файл от мусора?
|
|
« Последнее редактирование: 07-09-2005 08:05 от Алексей1153 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #24 : 19-04-2006 18:18 » |
|
А проблема не снята Кто-нибудь столкнулся? Нужно именно получить строку с путём через CFileDialog
|
|
|
Записан
|
|
|
|
|