Dll в ресурсах

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Dll в ресурсах

Сообщение alexey38 » 26.12.2012 11:47:22

В Дельфи я использовал что-то типа:
Код: Выделить всё
NPath:=ExpandUNCFileName(DataPath+S2);
if DirectoryExists(NPath) then
begin
...

И это работало
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Dll в ресурсах

Сообщение Leon » 26.12.2012 12:46:05

Серж.уж я не знаю как стандартными средствами примонтировать диск.По крайней мере такого еще делать не приходилось.На компе "А" эту самую расшаренную папку я оформил как сетевой диск.У него даже буква есть "Z:".
Но с компа "В" в сетевом окружении папка как раз смотрится как папка,а не диск "Z:".Порылся в Инете и накопал вот что.Докопался до сетевой папки по адресу C:/Documents and Settings/User/NetHood/. Поместил туда нужный файл tabl.txt и попробовал его увидеть из Лазаруса.Все классно.Лазарус файл нашел.Тогда я попробовал расширить путь доступа,указав сетевую папку и файл в ней C:/Documents and Settings/User/NetHood/FolderNet/tabl.txt и начались сбои.Выдает RunTime Error(2).Типа "не знаю,чего касаются надписи после NetHood/..."
Че делать - пока не знаю.Пересмотрел вчера все вкладки в Лазарусе,перерыл Хелп и нашел только модуль Sockets. А там такие дебри,не дай Господь.Полгода изучать - не разберешься.А с таким уровнем как у меня... Решение может и есть простое,увы,где оно?
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Re: Dll в ресурсах

Сообщение alexey38 » 26.12.2012 12:48:35

Leon писал(а):Но с компа "В" в сетевом окружении папка как раз смотрится как папка,а не диск "Z:"

На этой папке нажимаете в проводнике правую кнопку мыши, в локальном меню выбираете "Подключить сетевой диск" ...
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Dll в ресурсах

Сообщение Leon » 26.12.2012 13:06:59

alexey38,на радостях что вот-вот... забежал в папку "Сетевое окружение",нашел эту расшаренную на компе "А" папку FolderNet,кликнул правой мышей.а там "о подключении ее как сетевого диска" и слова нет... По идее она уже оформлена как диск на компе "А",но почему-то видна не диском,а папкой на компе "В" :?

Добавлено спустя 30 минут 33 секунды:
var S:string;//для полного пути к файлу
f:Textfile;

begin
S:=ExpandUNCFileName('\\pc1\foldernet\tabl.txt');//конструкция не сработала
AssignFile(f,S);Reset(f);

S:=ExpandUNCFileName('tabl.txt');//тоже не сработала

S:=ExpandUNCFileName('Z:\tabl.txt');//и тоже не сработала

end;
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Re: Dll в ресурсах

Сообщение Vapaamies » 26.12.2012 14:36:52

Leon писал(а):Нашел вверху в браузере пропись "\\pc1\FоlderNet\" и попытался вставить ее в структуру if FileExists('\\pc1\FоlderNet\') then... и у меня ничего не вышло.

И правильно, ибо нефиг. Сначала нужно научиться пользоваться системой на уровне пользователя, чтобы понимать, что означает косая черта в конце, и что она не является частью имени каталога. В SysUtils есть функция DirectoryExists, и я не вижу никаких причин, чтобы она не работала с UNC-путями.

SSerge писал(а):чисто сетевой уровень, насколько помню при нем например нет файлов прямого доступа, только последовательно читаемые потоки.

Да ну! А как тогда файловые СУБД работают через расшаренные ресурсы? Файл по UNC-пути нельзя отобразить на память, а прямой доступ к нему есть и всегда был.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Dll в ресурсах

Сообщение Leon » 26.12.2012 19:31:27

Хорошо.Тогда я представлю вам сам код,а вы скажите,что и где не так

1.var S:string;//для полного пути к файлу
2.f:Textfile;
3.R:string;//для чтения из файла
4.
5.begin
6.Memo1.Text:='';//чистим Мемо
7.S:=ExpandUNCFileName('С:/Documents and Settings/NetHood/FolderNet/tabl.txt');
8.AssignFile(f,S);Reset(f);
9.
10.While not Eof(f) do
11.begin
12. Readln(f,R);
13.Memo1.Text:=Memo1.Text+#13#10+R;//читаем файл и пишем строки в мемо
14.end;

Ну вот.Вся эта красота выдает мне RunTime Error(2) at string 12.
Притом в нормальном режиме,если файл лежит в какой-нить обычной (не сетевой) папке таких фокусов система не выдает.Где же ошибка? Подскажите кто-нить внятно.
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Re: Dll в ресурсах

Сообщение alexey38 » 26.12.2012 20:25:10

Leon писал(а):S:=ExpandUNCFileName('С:/Documents and Settings/NetHood/FolderNet/tabl.txt');

Не пробовали слеши писать как в видне, а не в юнихе?

С папкой "NetHood" я не работал, но возможно, что это как бы ярлык, потому, что у меня сетевые диски там не появляются. Будет ли с этим работать я не знаю.
Попробуйте в сетевом окружении не папки смотреть, а найти комр "pc1", ну или в проводнике просто набрать "\\pc1", и там уже на FоlderNet вызвать локальное меню и подключить сетевой диск.
Либо работать if DirectoryExists('\\pc1\FоlderNet') then
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Dll в ресурсах

Сообщение Vapaamies » 26.12.2012 20:43:39

Leon писал(а):Ну вот.Вся эта красота выдает мне RunTime Error(2) at string 12.

ERROR_FILE_NOT_FOUND -- The system cannot find the file specified.

А вообще ваша задача решается одной строчкой вместо всего этого быдлокода:
Код: Выделить всё
Memo1.Lines.LoadFromFile('\\pc1\FolderNet\tabl.txt');
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Dll в ресурсах

Сообщение Leon » 26.12.2012 23:54:34

Vapaamies,спасибо за подсказку.такая конструкция вообще проще.Но дело то не в этом.К самому файлу пока не доступиться.

alexey38,решил я пойти на пошаговую отладку. И снова пролет...
Структура if DirectoryExists('\pc1FоlderNet') then похоже работает и так if DirectoryExists('//pc1/FоlderNet/')

Следующая за ней структура S:=ExpandUNCFileName('\pc1FоlderNettabl.txt') не работает.Отладчик проходит,но переменная S остается пуста.Следовательно все последующие команды типа if FileExists(S) тоже не работают.
От наклона слэшей похоже это не зависит.Может я что не так указал? Или что еще этой команде нужно?

Добавлено спустя 18 минут 50 секунд:
Ребята,ура! :lol: нашел! Методом научного тыка.
Просто что-то мне подспудно подсказало попробовать убрать UNC.
Написал просто S:=ExpandFileName('\\pc1\FоlderNet\tabl.txt') и все прошло как по-салу. :D
Кстати работает и сама конструкция if FileExists('\\pc1\FоlderNet\tabl.txt');
Ура! мы живем! Ну а далее дело уже пойдет.
Спасибо всем за участие.
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Re: Dll в ресурсах

Сообщение alexey38 » 27.12.2012 05:49:57

Leon писал(а):ExpandUNCFileName

В том виде она была не нужна, хотя должна была работать. Ее смысл приведения имен файлов к единому виду, вне зависимости от того, как было задано на входе. По крайней мере в Дельфях у меня это лет 5 назад работало.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Dll в ресурсах

Сообщение Leon » 28.12.2012 21:31:59

Всех моих консультантов и советчиков поздравляю с наступающим Новым годом.Здоровья вам,мира,благополучия.Спасибо вам за то драгоценное время,которое вы на меня потратили.
==============
С ув.Алексей
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 230

Рейтинг@Mail.ru
cron