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

  • Автор темы doc
  • Дата начала
D
#1
Существует ли возможность доступа к файлу .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, отсутсвует в целях безопастности.
Кто-нибудь может помочь?
 

TIA

:-)
Lotus team
15.05.2009
790
3
#3

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
быренько замапить нужный путь как папку, проверить и размапить :eek:oo:
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#5
На основе хелпа: "If you specify a fileName that does not exist, LotusScript generates an error if the mode is Input;..",
как-то так:

Код:
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
не покатит? :)
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#7
Dir короче, а делает тоже самое
Ага. Только тогда не забыть attributeMask = 6 выставить, чтобы все файлы проверяло, а то "флаг по умолчанию" проваливается если нужно проверить наличие файла вне зависимости от атрибута.
 
D
#8
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") было бы удобно.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#9
А мне бы хотелось скажем получить размер некого файла, причем файл может находится на другом сервере
Если агент работает на сервере, то сможете
Соответственно, если агент работает не на сервере, где лежит БД, то не сможете. В зависимости от задачи, размер можно считать например из каталога.

Ещё есть FileLen .
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#10
Что-то она у меня для файла 3Gb возвращает пургу какую-то в виде отрицательного значения... я разделил два раза на 1024 и получилось -749.6.
Может можно как-то заставить её давать правильные значения?
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#12
Преобразуй знаковый Long в беззнаковое 4-байтное целое. В пределах ~4Гб будет правильно, выше - нет.
Такой код
Код:
Strconv(Cstr(Filelen(filename)), 4) / (1024 ^ 2)
работает нормально до 1 Гб. Где-то в пределах 1 - 3,5 Гб (файлов в 2 Гб у меня сейчас нет проверить) клинит и он о5 начинает возвращать отрицательное значение.
Может что-то не так делаю?
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#14
ToxaRat, ничего не изменилось, - результат тот же((

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

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#15
Попробовал
Код:
fileSize = stream.Bytes / (1024 ^ digit)
на больших файлах возвращает -1.
В хэлпе на метод notesStream.ReadText: "Defaults to the entire stream to a maximum of 2GB." Так что, наверное, в обоих случаях отсюда ноги растут.
 

nvyush

Lotus team
22.04.2009
2 317
0
#16
Попробовал
Код:
fileSize = stream.Bytes / (1024 ^ digit)
на больших файлах возвращает -1.
В хэлпе на метод notesStream.ReadText: "Defaults to the entire stream to a maximum of 2GB." Так что, наверное, в обоих случаях отсюда ноги растут.
Имхо, ноги растут от типа Long:
A Long value is a whole number in the range -2,147,483,648 to 2,147,483,647 inclusive.
 

hosm

* so what *
18.05.2009
2 442
6
#17
VladSh а вот на это, имхо, стоит выругаться в ИБМ.
Пусть делают беззнаковый тип, нормально вмещающий размер файла! :D
 

nvyush

Lotus team
22.04.2009
2 317
0
#18
VladSh а вот на это, имхо, стоит выругаться в ИБМ.
Пусть делают беззнаковый тип, нормально вмещающий размер файла! :D
Notes and Domino known limits:
Database size The maximum OS file size limit -- (up to 64GB)

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

TIA

:-)
Lotus team
15.05.2009
790
3
#19
A Long value is a whole number in the range -2,147,483,648 to 2,147,483,647 inclusive.
Именно. Размер файла выше 2,147,483,647 вызывает переполнение и представляется отрицательным числом. Потому и надо перевести в беззнаковое. Чую не справишься. Вот, до 4Гб будет работать, а выше уже FileLen нельзя использовать:

Код:
Function SignToUnsign( x As Long) As Currency
SignToUnsign = x	
If x<0 Then		
SignToUnsign = (x And &h7FFFFFFF) + 2147483648
End If
End Function