Ответ 1
Я не знаю, есть ли какие-либо встроенные функции для этого, но он довольно прямой, чтобы получить путь.
path = path.substring(0,path.lastIndexOf("\\")+1);
Как получить каталог файла?
Например, я передаю строку
C:\Program Files\nant\bin\nant.exe
Мне нужна функция, которая возвращает меня
C:\Program Files\nant\bin
Я бы предпочел встроенную функцию, которая выполняет задание, вместо того, чтобы вручную разбить строку и исключить последнюю.
Изменить: я запускаюсь в Windows
Я не знаю, есть ли какие-либо встроенные функции для этого, но он довольно прямой, чтобы получить путь.
path = path.substring(0,path.lastIndexOf("\\")+1);
Использование:
var dirname = filename.match(/(.*)[\/\\]/)[1]||'';
* Ответы, основанные на lastIndexOf ('/') или lastIndexOf ('\'), подвержены ошибкам, потому что путь может быть "c:\aa/bb\cc/dd".
(Мэтью Флашэн сделал это во внимание, поэтому мой ответ является альтернативой регулярному выражению)
Нет идеального решения, потому что эта функциональность не встроена, и нет способа получить системный разделитель файлов. Вы можете попробовать:
path = path.substring(0, Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")));
alert(path);
function getFileDirectory(filePath) {
if (filePath.indexOf("/") == -1) { // windows
return filePath.substring(0, filePath.lastIndexOf('\\'));
}
else { // unix
return filePath.substring(0, filePath.lastIndexOf('/'));
}
}
console.assert(getFileDirectory('C:\\Program Files\\nant\\bin\\nant.exe') === 'C:\\Program Files\\nant\\bin');
console.assert(getFileDirectory('/usr/bin/nant') === '/usr/bin');
Извините, что вернул это резервное копирование, но также искал решение без ссылки на переменную дважды. Я придумал следующее:
var filepath = 'C:\\Program Files\\nant\\bin\\nant.exe';
// C:\Program Files\nant\bin\nant.exe
var dirpath = filepath.split('\\').reverse().splice(1).reverse().join('\\');
// C:\Program Files\nant\bin
Это небольшая прогулка по манипулированию строкой с массивом и обратно, но она достаточно чиста, я думаю.
И это?
Если это не программа в addressFile, возвращайте адресFile
function(addressFile) {
var pos = addressFile.lastIndexOf("/");
pos = pos != -1 ? pos : addressFile.lastIndexOf("\\");
if (pos > addressFile.lastIndexOf(".")) {
return addressFile;
}
return addressFile.substring(
0,
pos+1
);
}
console.assert(getFileDirectory('C:\\Program Files\\nant\\bin\\nant.exe') === 'C:\\Program Files\\nant\\bin\\');
console.assert(getFileDirectory('/usr/bin/nant') === '/usr/bin/nant/');
console.assert(getFileDirectory('/usr/thisfolderhaveadot.inhere') === '/usr/');
Основной язык Javascript не предоставляет функции file/io. Однако, если вы работаете в ОС Windows, вы можете использовать FileSystemObject (ActiveX/COM).
Примечание. Не используйте это в клиентском script -side script веб-приложения, хотя это лучше всего в других областях, например, в Windows script, или на стороне сервера веб-приложения, где у вас больше контроля над платформой.
Эта страница дает хороший учебник о том, как это сделать.
Вот пример, который вы хотите сделать:
var fso, targetFilePath,fileObj,folderObj;
fso = new ActiveXObject("Scripting.FileSystemObject");
fileObj = fso.GetFile(targetFilePath);
folderObj=fileObj.ParentFolder;
alert(folderObj.Path);