Я не понимаю это поведение. Возможно, кто-то может объяснить мне, почему мой текущий рабочий каталог не то, что я ожидаю.
На моем рабочем столе у меня есть папка под названием STKGui:
C:\Documents and Settings\Lauren\Desktop\STKGui
Расположенный в том каталоге следующие файлы: gui.html, style.css, save.html, load.html В STKGui там является также следующими каталогами: Изображения, Сценарии и SaveData. Сценарии содержат различные .vbs файлы, включая gui.vbs.
Я запускаю с gui.html. Я нажимаю кнопку, которая берет меня к load.html. load.html использует сценарии от Scripts\gui.vbs. Одна из функций загружает базу данных, и сделать так я обеспечиваю местоположение базы данных: C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData.accdb, Конечно, я хочу использовать путь файла прямого доступа вместо фиксированного пути. Моя начальная попытка загрузить базу данных перестала работать; это пыталось загрузиться от C:\Documents and Settings\Lauren\Desktop\SaveData\SaveData.accdb. Таким образом для поиска и устранения неисправностей я распечатал текущий рабочий каталог; очень к моему огорчению это был C:\Documents and Settings\Lauren\Desktop
Я не понимаю, почему мой рабочий стол является моим текущим рабочим каталогом. Разве это не должно быть, откуда файл работает? Я полагал, что это будет любой C:\Documents and Settings\Lauren\Desktop\STKGui (the location of load.html), ИЛИ C:\Documents and Settings\Lauren\Desktop\STKGui\Scripts (the location of gui.vbs, который содержит функцию, это пытается загрузить сообщения отладки базы данных/печати текущего рабочего каталога).
Кто-то может объяснить, почему текущий рабочий каталог - то, что это, или еще лучше скажите мне, как получить то, что я действительно хочу, который является местоположением выполнения файлов? (Я не забочусь, является ли это основная папка STKGui или папка сценариев - пока это в структуре каталогов приложения, я могу работать с ним!)
РЕДАКТИРОВАНИЕ (14.07.10 16:02 EDT):
Различные попытки печати текущего рабочего каталога или захвата файлов на основе того, что я - мысль был относительным путем из своего сценария выполнения, привели к пути моего рабочего стола вместо пути выполняемого сценария. Я споткнулся через эту ссылку: http://leereid.wordpress.com/2008/03/19/vbscript-current-directory-or-folder/, но ни одно из решений не работает на меня, поскольку я получаю ошибки времени выполнения относительно объекта Wscript. Таким образом, в то время как я не знаю, приведет ли какое-либо из решений на вышеупомянутой ссылке к различным результатам, если кто-то может помочь мне получить по крайней мере одного из них работающий, таким образом, я могу узнать, что это может быть шагом в правильном направлении.
Одно из решений, воспроизведенных ниже:
Set oShell = CreateObject("WScript.Shell")
Set ofso = CreateObject("Scripting.FileSystemObject")
oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)
производит следующую ошибку:
Объект потребовал: строка 'Wscript': 659 символов: 1
со строкой 659 являющийся:
oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)
Это решение НЕ было идеальным, но в итоге я проанализировал URL-адрес в моем браузере, чтобы получить каталог .
guiPath = Mid(location.PathName, 2, len(location.PathName))
Set regExp = New RegExp
regExp.IgnoreCase = False
regExp.Global = True
regExp.Pattern = ".*/"
Set matchCollection = regExp.Execute(guiPath)
Set match = matchCollection(0)
guiPath = match.value
regExp.Pattern = "%20"
guiPath = regExp.Replace(guiPath, " ")
systemsDBPath = guiPath & "SaveData\SaveData.accdb"
Как я уже сказал, далеко не идеал. Может даже не работать, когда я работаю с приложением, в котором оно будет работать. Но я не мог найти лучшего способа.
Для серверной части:
Вы должны использовать Server.MapPath()
для получения вашей "рабочей директории". Например, если вы хотите получить путь к файлу базы данных в C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData. accdb
, корень вашего приложения C:\Documents and Settings\Lauren\Desktop\STKGui
, вы будете использовать Server.MapPath("SaveData\SaveData.accdb")
.
Для клиентской стороны:
При ближайшем рассмотрении и копании в памяти, я понял, что MapPath доступен только из класса Server. Вместо этого вам нужно создать объект файловой системы следующим образом:
''get fs object
Set objFSO = CreateObject("Scripting.FileSystemObject")
''get actual file using path relative to calling vbs file
Set objFile = objFSO.GetFile("SaveData\SaveData.accdb")
''get path to the database
set sPathToDatabase = objFSO.GetAbsolutePathName(objFile)
Если это поможет, вот отличный ресурс по работе с файловой системой в vbScript: http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/filesfolders/files/