Обработка файлов, не работает Kill

Тема в разделе "Lotus - Программирование", создана пользователем Gor, 4 авг 2010.

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Всем доброго дня!

    есть небольшой скрипт:

    Код (Text):
    Dim doc1 As NotesDocument
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument   
    Set db = session.CurrentDatabase   

    Const pathName$ = "\\server1\tmp\"


    filename$ = Dir$(pathName$,0)

    Do While filename$ <> ""       


    idFile% = FreeFile()

    Open pathName$ & filename$ For Input As idFile Len = 512


    Do While Not EOF(idFile%)
    Line Input #idFile%, ID
    Line Input #idFile%, Subject
    Loop


    Close #idfile

    Kill pathName$ & filename$

    fileName$ = Dir$()

    Loop
    смысл в том чтобы разобрать файл, сделать какие то действия, закрыть его и удалить.

    Но почему то на строчке Kill pathName$ & filename$ срывается в ошибку - File\Path access error
    Хотя на эту папку права даны Everyone - Full Control...
    Скрипт я запускаю под собой, прописал права на папку принудительно ещё себя, не помогает...

    Если после запуска скрипта я зайду в эту папку - то без проблем его удаляю руками

    Где же грабли?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    может сам файл залочен?
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Вероятно, килл не работает с сетевым путем. Юзай апи или яву (если она умеет).
    А еще можно попробовать батник запускать на удаление нужного файла, правда, не помню умеет ли цмдшка убивать сетевые файлы.
     
  4. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Файл не залочен... после отработки скрипта я же его удаляю спокойно сам ручками... Да и утилиту натравливал wholockedfile - всё пусто...

    Да и Лотус по идее файл лочить не должен, я же его перед Kill-ом закрываю...

    Вот больше склоняюсь к тому, что Kill действительно видимо не работает с сетевыми путями... Хотя как то странно - Dir, MkDir итд работают а Kill нет...


    CMD-шкой можно сделать, уже думал такой вариант и работать будет, но хочется делать это из кода всётаки.

    А с помощью API не у кого нет примера на удаление файла? Или в ссылку ткните? чёто ненагуглил((
     
  5. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    и на API не хочет=)))))))))))

    Код (Text):
    Declare Function DeleteFile Lib "kernel32.dll" Alias "DeleteFileA" (ByVal lpFileName As String) As Long


    s = Replace(pathName$&filename1$,"\","\\")

    rez = DeleteFile(s)
    rez = DeleteFile(pathName$&filename1$)

    If rez = 1 Then MsgBox "Файл удален"
    зараза какая то...

    Заработало.

    Вот с таким путём работает

    \\сервер\c$\tmp\

    Видимо Kill не работает с расшаренными папками...



    У меня по ходу дела назрел ещё один вопрос:

    Предположим, если я хочу чтобы Лотус проверял какую либо папку каждую минуту.
    Насколько я знаю в Шедуллерных агентах периодичность запуска минимум 5 минут.

    Как настроить так, чтобы агент запускался каждую минуту и смотрел появились ли там файлы или нет, ну и соответственно если появились, то выполнять какие нибудь действия?
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Нет, такой вариант плохой. Админскую шару использовать не по назначению не хорошо.
     
  7. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Согласен, но это не продакшн вариант - временная настройка на тестирование.

    А по поводу вопроса

    идей нет ?
     
  8. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Внутри агента скриптом выдерживать паузу в 1 мин. и повторно выполнить его работу. Так 4 раза.
     
  9. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Подскажите плиз как это лучше организовать, что использовать?
    NotesTimer?

    Как то я с этим не сталкивался ни разу...
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Sleep
     
  12. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Gor
    sleep(60)
     
  13. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Не придумывайте ничего - всегда работало и работает. Настраивайте права доступа правильно.

    \\сервер\c$\tmp\ vs \\сервер\Share\tmp\ - разницы не никакой.


    Добавлено:
    Hint: В св-вах агента установите периодичность в 1 минуту, сохраните и закройте... Будет вам 1 минута:)
    Если строго через 1 минуту, то через Program документы сервера. Если на клиенте и меньше минуты - запускайте агента в фоновом треде и через конструкцию Yield|DoEvents & Seconds() формируйте задержку...
     
  14. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    В свойствах агента нельзя поставить интервал запуска 1 минута. Минимум 5.

    не знаю есть ли разница или нет, но у меня работает только 1й вариант.

    К сожалению правами доступа занимаюсь не я... Хотя если бы у меня был доступ, я думаю всё прошло бы намного легче

    со sleep работает.

    sleep(60)

    всем огромное спасибо
     
Загрузка...

Поделиться этой страницей