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) {
});
```
### 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.
Example:
......@@ -165,6 +165,8 @@ smb2Client.createWriteStream('path\\to\\the\\file', function (err, readStream) {
readStream.pipe(writeStream)
});
```
### smb2Client.ensureDir ( path, callback )
Ensures that the directory exists. If the directory structure does not exist, it is created.
## References
......
# Releases
## 0.4.0
- smb2.ensureDir
## 0.3.1
- smb2.createReadStream
- 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'));
proto.rmdir = SMB2Connection.requireConnect(require('./api/rmdir'));
proto.mkdir = SMB2Connection.requireConnect(require('./api/mkdir'));
proto.ensureDir = SMB2Connection.requireConnect(require('./api/ensureDir'));
......@@ -22,7 +22,9 @@ var defaults = {
, self.parseResponse && self.parseResponse(response)
);
} 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