Доступ к файлу вне папки Lotus\data

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

  1. doc

    doc Гость

    Существует ли возможность доступа к файлу .nsf вне папки data.
    Ситуация такая я программно с помощью консольной команды (CL COPY mail\someOne e:\Terminations\mail\someOne.nsf) копирую некую базу в папку на другой диск (e:\Terminations\). Сама папка data находится на D:\Lotus\data. Теперь я хочу программно проверить скопировалась ли дааня база в нужную папку. Можно ли это как-нибудь проверить.
    если напишу Set db = new NotesDatabse("ServerName", "e:\Terminations\mail\someOne.nsf")
    Предполагаю, что не сработает. Я так предполагяю, что вообще доступ к таким файлам, вне папки data, отсутсвует в целях безопастности.
    Кто-нибудь может помочь?
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    LS: Dir function
     
  3. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Если агент работает на сервере, то сможете через NotesDatabse("", "e:\Terminations\mail\someOne.nsf")

    Dir тоже сработает только если агент на сервере запущен.
     
  4. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    быренько замапить нужный путь как папку, проверить и размапить :eek:oo:
     
  5. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    На основе хелпа: "If you specify a fileName that does not exist, LotusScript generates an error if the mode is Input;..",
    как-то так:

    Код (Text):
    Function IsFileExist(FileName As String) As Boolean
    RezOpen% = IsFileOpen(FileName)
    Select Case RezOpen%
    Case 0  ', <код ошибки доступа к файлу>, наличие которой также означает, что файл существует
    IsFileExist = True
    End Select
    End Function

    Function IsFileOpen(FileName As String) As Integer
    Err = 0
    On Error Resume Next
    fileNum% = FreeFile()
    Open FileName For Input As fileNum%
    If Err = 0 Then Close fileNum%
    IsFileOpen = Err        'Если смог открыть файл - возвращает 0
    Err = 0
    End Function
    не покатит? :)
     
  6. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Dir короче, а делает тоже самое
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Ага. Только тогда не забыть attributeMask = 6 выставить, чтобы все файлы проверяло, а то "флаг по умолчанию" проваливается если нужно проверить наличие файла вне зависимости от атрибута.
     
  8. doc

    doc Гость

    Thanx a lot Я так понимаю, что функция dir возвращает список файлов и папок (Returns file or directory names from a specified directory, or returns a drive volume label). А мне бы хотелось скажем получить размер некого файла, причем файл может находится на другом сервере. В этом плане new NotesDatabse("ServerName", "e:\Terminations\mail\someOne.nsf") было бы удобно.
     
  9. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Соответственно, если агент работает не на сервере, где лежит БД, то не сможете. В зависимости от задачи, размер можно считать например из каталога.

    Ещё есть FileLen .
     
  10. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Что-то она у меня для файла 3Gb возвращает пургу какую-то в виде отрицательного значения... я разделил два раза на 1024 и получилось -749.6.
    Может можно как-то заставить её давать правильные значения?
     
  11. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Преобразуй знаковый Long в беззнаковое 4-байтное целое. В пределах ~4Гб будет правильно, выше - нет.
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Такой код
    Код (Text):
    Strconv(Cstr(Filelen(filename)), 4) / (1024 ^ 2)
    работает нормально до 1 Гб. Где-то в пределах 1 - 3,5 Гб (файлов в 2 Гб у меня сейчас нет проверить) клинит и он о5 начинает возвращать отрицательное значение.
    Может что-то не так делаю?
     
  13. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    приведи к плавающей, а то похоже идет банальное преобразование в интежер
     
  14. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    ToxaRat, ничего не изменилось, - результат тот же((

    To All
    Так есть ли у кого готовая функция на LS по "взвешиванию" файлов/папок, а то использую WinAPI, а так не хочется его использовать... :ya_lamo:
     
  15. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Попробовал
    Код (Text):
    fileSize = stream.Bytes / (1024 ^ digit)
    на больших файлах возвращает -1.
    В хэлпе на метод notesStream.ReadText: "Defaults to the entire stream to a maximum of 2GB." Так что, наверное, в обоих случаях отсюда ноги растут.
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Имхо, ноги растут от типа Long:
    A Long value is a whole number in the range -2,147,483,648 to 2,147,483,647 inclusive.
     
  17. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    VladSh а вот на это, имхо, стоит выругаться в ИБМ.
    Пусть делают беззнаковый тип, нормально вмещающий размер файла! :D
     
  18. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Notes and Domino known limits:
    Database size The maximum OS file size limit -- (up to 64GB)

    Беззнаковый Long тут тоже не поможет, он только до 4Г. Либо double, либо Long64
     
  19. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Именно. Размер файла выше 2,147,483,647 вызывает переполнение и представляется отрицательным числом. Потому и надо перевести в беззнаковое. Чую не справишься. Вот, до 4Гб будет работать, а выше уже FileLen нельзя использовать:

    Код (Text):
    Function SignToUnsign( x As Long) As Currency
    SignToUnsign = x   
    If x<0 Then    
    SignToUnsign = (x And &h7FFFFFFF) + 2147483648
    End If
    End Function
     
Загрузка...

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