Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Не открывается текстовый файл для чтения

Не открывается текстовый файл для чтения

Ответ
Поиск в этой теме
Непрочитано 13.03.2012, 15:03 #1
Не открывается текстовый файл для чтения
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

Подскажите, плиз, почему я иногда вижу предупреждение "Не удалось открыть файл test.txt" ?
В каких случаях автокад видит файл, но не может его открыть ?

Файл test.txt лежит в "Мои документы"

Код:
[Выделить все]
(setq filename "test.txt")
(if (findfile filename)
(if (not (setq fo (open filename "r")))
	(alert "Не удалось открыть файл test.txt")
); if
); if
Просмотров: 9451
 
Непрочитано 13.03.2012, 15:11
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Подсказка

Что возвращает в командной строке это выражение:

(findfile "test.txt")???
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 13.03.2012, 15:18
#3
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Олег (jr.), спасибо, дошло.

Наверное, кодировка.
Я вижу C:\\Documents and Settings\\Kuznetsov\\Мои документы\\test.txt и у меня файл открывается
а на другом компьютере, скорее всего, крякозябры.
swkx вне форума  
 
Непрочитано 13.03.2012, 17:33
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от swkx Посмотреть сообщение
Подскажите, плиз, почему я иногда вижу предупреждение "Не удалось открыть файл test.txt" ?
В каких случаях автокад видит файл, но не может его открыть ?
1. Когда его нет.
2. Когда он уже открыт.
3. Когда нет доступа к нему.
Александр Ривилис вне форума  
 
Непрочитано 13.03.2012, 18:04
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


(defun filerr (msg) (close fd)) - в обязательном порядке!
gomer вне форума  
 
Автор темы   Непрочитано 13.03.2012, 18:39
#6
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


gomer,

пока не понятно. Поясни, плиз.

Кстати, мое предположение насчет кодировки оказалось неверным

Уже на другом компьютере пробую:
Команда: (findfile "test.txt")
"C:\\Users\\Сергей\\Documents\\test.txt"

Путь отражается корректно, но тем не менее вижу "Не удалось открыть файл test.txt"
swkx вне форума  
 
Непрочитано 13.03.2012, 19:22
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


swkx, В переменной filename хранится "test.txt" и ф-ции open ничего не известно, где ты пытаешься его открыть. Она ничего не ищет!, а пытается открыть "test.txt" вместо "C:\\Users\\Сергей\\Documents\\test.txt"
Цитата:
Я вижу C:\\Documents and Settings\\Kuznetsov\\Мои документы\\test.txt и у меня файл открывается
Это случайное совпадение. Просто "C:\\Documents and Settings\\Kuznetsov\\Мои документы" текущая директория в этом сеансе Автокада
Так понятно?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.03.2012, 19:38
#8
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


VVA,

да, понятно. Заменил код на такой

Код:
[Выделить все]
(setq name1 "test.txt")
(if (setq name2 (findfile name1))
(if (not (setq fo (open name2 "r")))
	(alert "Не удалось открыть файл test.txt")
); if
); if
И все заработало. Спасибо.
swkx вне форума  
 
Непрочитано 13.03.2012, 20:29
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


swkx, вот я даже код не буду заморачиваться писать, миллион раз уже это сделано до меня, как переопределить стандартную функцию *error*
Для чего это надо? Да чтоб программа работала не раз в сессию автокада, а сколько нужно... В основном нужно вислоухим программистам, которые путают типы данных или забывают о переменных...
К тому же, пора бы вам забыть про абсолютные пути и вспомнить про системные переменные автогада, например MYDOCUMENTSPREFIX
gomer вне форума  
 
Автор темы   Непрочитано 13.03.2012, 20:39
#10
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


gomer,

очевидно же, что вместо (open filename "r") нужно использовать (open (findfile filename) "r").
я просто туплю, потому что очень редко пользуюсь лиспом

и при чем тут переопределение *error*, не пойму

а про MYDOCUMENTSPREFIX вообще забыл(((
swkx вне форума  
 
Непрочитано 13.03.2012, 21:52
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


че ж тут не понятного?

Код:
[Выделить все]
 (defun test1 (fn lst / fn fd *error*)
  (defun *error* (msg) (close fd))
  (if (findfile fn)
    (progn
      (setq fd (open fn "w"))
      (mapcar '(lambda (x) (write-line x fd)) lst)
      (itoa (/ (log 2) (log 1)))
      (close fd)
    )
    (alert "Файл не найден!")
  )
)

(defun test2 (fn lst / fn fd )
  (if (findfile fn)
    (progn
      (setq fd (open fn "w"))
      (mapcar '(lambda (x) (write-line x fd)) lst)
      (itoa (/ (log 2) (log 1)))
      (close fd)
    )
    (alert "Файл не найден!")
  )
)

(defun test3 (fn lst / fn fd *error*)
  (defun *error* (msg) (close fd))
  (if (findfile fn)
    (progn
      (read-line fd)
      (itoa (/ (log 2) (log 1)))
      (read-line fd)
      (close fd)
    )
    (alert "Файл не найден!")
  )
)

(defun test3 (fn lst / fn fd )
  (if (findfile fn)
    (progn
      (read-line fd)
      (itoa (/ (log 2) (log 1)))
      (read-line fd)
      (close fd)
    )
    (alert "Файл не найден!")
  )
)

(test1 "c:\\test.txt" (list "Привет," "мир!"))
(test2 "c:\\test.txt" (list "Привет," "мир!"))
(test3 "c:\\test.txt" )
(test4 "c:\\test.txt" )
Просто почувствуй разницу
gomer вне форума  
 
Автор темы   Непрочитано 14.03.2012, 12:18
#12
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Не почувствовал.
Но объяснений уже не прошу. Видимо, уже никогда не дойдет(((
swkx вне форума  
 
Непрочитано 14.03.2012, 13:12
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


попробуйте запускать тестовые функции по очереди, а потом, например, удалять тестовый файл
gomer вне форума  
 
Автор темы   Непрочитано 14.03.2012, 14:05
#14
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


test2 сообщила об ошибке "деление на нуль", test1 это проглотила молча

(defun *error* (msg) (close fd)) - эта функция подавляет сообщение об ошибке и продолжает выполнение функции, вызвавшей ошибку ?
swkx вне форума  
 
Непрочитано 14.03.2012, 14:57
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


(defun *error* (msg) (close fd)) - закрывает открытый файл, даже если в функции возникло прерывание
gomer вне форума  
 
Автор темы   Непрочитано 14.03.2012, 15:03
#16
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от gomer Посмотреть сообщение
закрывает открытый файл, даже если в функции возникло прерывание
Это понятно
swkx вне форума  
 
Непрочитано 14.03.2012, 15:23
#17
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


теперь попробуйте сразу после test2 и test4 удалить ваш файл, не выходя из автокада
gomer вне форума  
 
Автор темы   Непрочитано 14.03.2012, 15:28
#18
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Пробовать не буду, и так понятно, что файл после ошибки остался открытым и с ним уже ничего не сделать.
swkx вне форума  
 
Непрочитано 14.03.2012, 15:59
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


надеюсь вам теперь все понятно
gomer вне форума  
 
Автор темы   Непрочитано 14.03.2012, 16:23
#20
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Цитата:
Сообщение от gomer Посмотреть сообщение
надеюсь вам теперь все понятно
Не совсем.
С (defun *error* (msg) (close fd)) все понятно: переопределили стандартный обработчик ошибок.
А в посте #5 приводилось (defun filerr (msg) (close fd)) Откуда автокаду знать, что вместо родной *error* нужно использовать filerr ?
swkx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Не открывается текстовый файл для чтения

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Текстовый файл исходных данных процессора ПК Лира ЛАО Лира / Лира-САПР 9 21.01.2010 14:26
Файл адаптации предприятия Shoorup Программирование 8 14.03.2008 01:28
Не открывается файл .DXF pers2 AutoCAD 4 01.03.2008 12:05
Файл автокада не открывается... VadimVG AutoCAD 6 21.08.2007 11:42