Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выбор файла в сети (путь получается неправильный)  (Прочитано 22201 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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

то есть в первом варианте - приходится убирать метку и скобки, а во втором - вообще дописывать диск!

как мне получить пути в нужном мне виде?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 05-09-2005 08:59 » 

ау
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 05-09-2005 11:39 » 

Хм....
Записан

А птичку нашу прошу не обижать!!!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 05-09-2005 11:48 » 

вот-вот...
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 05-09-2005 13:35 » 

Алексей1153,  ты в MSDN уже смотрел?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #7 : 06-09-2005 06:13 » 

А что возвращает dlg.m_ofn.lpstrFile?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 06-09-2005 06:57 » 

то же что и
dlg.GetPathName()
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 06-09-2005 08:19 » 

полный путь мне нужен для регистрации в реестре базы данных для юзанья через FireBird

если подключать по сети, тосимвольные пути не катят - пока не укажу название компа, диск,полный путь - не подключается

Записан

Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 06-09-2005 08:48 » 

В Firebird есть файл aliases.conf. В этом файле можно указывать псевдонимы для баз данных. Например:
Guard = C:\Guard2\1.FDB
Далее вместо указания C:\Guard2\1.FDB при подключении можно будет просто указать Guard.
Может быть это то, что надо?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 06-09-2005 09:48 » 

Chaa, нет, думаю это не подходит - больно неудобно

--------------
А вообще, я подумал - может так и лучше? То есть если база открыта для чтения на сервере, то чел на клиенте должен указать полный путь (он просто должен его знать) , а иначе он прогу не запустит Улыбаюсь

Так что может оно и к лучшему, хотя неприятный осадок остаётся...
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 06-09-2005 12:32 » 

Джон, что есть "замапишь" ? Улыбаюсь
Записан

baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #15 : 06-09-2005 12:46 » 

Он имеет в виду операцию, подобную subst
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Джон
просто
Администратор

de
Offline 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
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 07-09-2005 02:20 » 

Алексей1153, напиши поподробнее, какой путь тебе надо получить. Насколько я понял из поста #10, тебе для подключения к СУБД Firebird нужен локальный путь к этой базе данных на сервере.
Или нет?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 07-09-2005 04:47 » 

Алексей1153, напиши поподробнее, какой путь тебе надо получить. Насколько я понял из поста #10, тебе для подключения к СУБД Firebird нужен локальный путь к этой базе данных на сервере.
Или нет?

угу, нужен без всяких закорючек
Записан

Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #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
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #20 : 07-09-2005 07:09 » 

Путь второй:
Пользователи должны знать этот путь или должны иметь возможность получить его из изветсного им места.
По-моему он это и пытается сделать через CFileDialog?
А строку в файл глупый юзер добавлять не будет.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 07-09-2005 07:18 » 

Chaa , это не совсем удобно, я уже говорил выше...

"Пользователи должны знать этот путь или должны иметь возможность получить его из изветсного им места."
- о да! Улыбаюсь))

baldr,
"А строку в файл глупый юзер добавлять не будет."
да в принципе он никуда не денется, но не в файл а в диалог Улыбаюсь ... Но за поддержкой будет звонить мне Улыбаюсь

------------
вообще-то в большинстве случаев путь надо 1 раз указать  - потом он сохраняется в реестре.. Так что может сойдёт и так
Записан

Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 07-09-2005 07:29 » 

"Глупый юзер" и не должен строки в файл писать. aliases.conf это конфигурационный файл СУБД, хранится на сервере. При создании новой БД в него надо один раз добавить строку - псевдоним.

Если честно, то непонтяно, почему все-таки это неудобно?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 07-09-2005 08:03 » 

мне кажется это не гибко

и как потом очистить этот файл от мусора?
« Последнее редактирование: 07-09-2005 08:05 от Алексей1153 » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 19-04-2006 18:18 » 

А проблема не снята Улыбаюсь

Кто-нибудь столкнулся? Нужно именно получить строку с путём через CFileDialog
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines