Commit 89924f83 authored by Fabrice Marsaud's avatar Fabrice Marsaud

ensureDir

parent d7930eab
...@@ -154,7 +154,7 @@ smb2Client.createReadStream('path\\to\\the\\file', function (err, readStream) { ...@@ -154,7 +154,7 @@ smb2Client.createReadStream('path\\to\\the\\file', function (err, readStream) {
}); });
``` ```
### smb2Client.createWtiteStream ( fileName, [options], callback ) ### smb2Client.createWriteStream ( fileName, [options], callback )
Returns a write stream on the file. Unlike fs.createWriteStream, this function is asynchronous, as we need use asynchronous smb requests to get the stream. Returns a write stream on the file. Unlike fs.createWriteStream, this function is asynchronous, as we need use asynchronous smb requests to get the stream.
Example: Example:
...@@ -165,6 +165,8 @@ smb2Client.createWriteStream('path\\to\\the\\file', function (err, readStream) { ...@@ -165,6 +165,8 @@ smb2Client.createWriteStream('path\\to\\the\\file', function (err, readStream) {
readStream.pipe(writeStream) readStream.pipe(writeStream)
}); });
``` ```
### smb2Client.ensureDir ( path, callback )
Ensures that the directory exists. If the directory structure does not exist, it is created.
## References ## References
......
# Releases # Releases
## 0.4.0
- smb2.ensureDir
## 0.3.1 ## 0.3.1
- smb2.createReadStream - smb2.createReadStream
- smb2.createWriteSTream - smb2.createWriteSTream
......
import {request} from '../tools/smb2-forge'
import Bluebird from 'bluebird'
const requestAsync = Bluebird.promisify(request)
const ensureOneDir = async function (path, connection) {
try {
const fileOrDir = await requestAsync('open', {path}, connection)
if (fileOrDir.FileAttributes.readIntBE(0, 1) === 0x00000010) { // See http://download.microsoft.com/DOWNLOAD/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/[MS-FSCC].pdf Section 2.6
await requestAsync('close', fileOrDir, connection)
} else {
throw new Error(`${path} exists but is not a directory`)
}
} catch (err) {
if (err.code === 'STATUS_OBJECT_NAME_NOT_FOUND') {
await requestAsync('create_folder', {path}, connection)
} else {
throw err
}
}
}
export default async function (path, cb) {
const structure = path.split('\\')
const base = []
try {
while(structure.length) {
base.push(structure.shift())
const basePath = base.join('\\')
if (!basePath.length) {
continue
}
await ensureOneDir(basePath, this)
}
cb(null)
} catch (error) {
cb(error)
}
}
...@@ -97,6 +97,6 @@ proto.readdir = SMB2Connection.requireConnect(require('./api/readdir')); ...@@ -97,6 +97,6 @@ proto.readdir = SMB2Connection.requireConnect(require('./api/readdir'));
proto.rmdir = SMB2Connection.requireConnect(require('./api/rmdir')); proto.rmdir = SMB2Connection.requireConnect(require('./api/rmdir'));
proto.mkdir = SMB2Connection.requireConnect(require('./api/mkdir')); proto.mkdir = SMB2Connection.requireConnect(require('./api/mkdir'));
proto.ensureDir = SMB2Connection.requireConnect(require('./api/ensureDir'));
...@@ -22,7 +22,9 @@ var defaults = { ...@@ -22,7 +22,9 @@ var defaults = {
, self.parseResponse && self.parseResponse(response) , self.parseResponse && self.parseResponse(response)
); );
} else { } else {
cb && cb(new Error(MsErref.getErrorMessage(err))); var error = new Error(MsErref.getErrorMessage(err))
error.code = err.code
cb && cb(error);
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment