Examples
May 23, 2021 ยท View on GitHub
Get items in shared folder:
//using EzSmb;
//using System;
//using System.Threading.Tasks;
// Get folder Node.
var folder = await Node.GetNode(@"192.168.0.1\ShareName\FolderName", "userName", "password");
// List items
var nodes = await folder.GetList();
foreach (var node in nodes)
{
Console.WriteLine($"Name: {node.Name}, Type: {node.Type}, LastAccessed: {node.LastAccessed:yyyy-MM-dd HH:mm:ss}");
}
Read file:
//using EzSmb;
//using System;
//using System.Text;
//using System.Threading.Tasks;
// Get file Node.
var file = await Node.GetNode(@"192.168.0.1\ShareName\FolderName\FileName.txt", "userName", "password");
// Get MemoryStream.
using (var stream = await file.Read())
{
var text = Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(text);
}
Create new folder/file:
//using EzSmb;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
// Get Node of base folder.
var folder = await Node.GetNode(@"192.168.0.1\ShareName\FolderName", "userName", "password");
// Create new folder.
var newFolder = await folder.CreateFolder("NewFolder");
Console.WriteLine(newFolder.FullPath);
// -> 192.168.0.1\ShareName\FolderName\NewFolder
// Create stream for new file.
var text = Encoding.UTF8.GetBytes("Hello!");
using (var stream = new MemoryStream(text))
{
// Write Stream to child.
await newFolder.Write(stream, "NewFile.txt");
// Validate
var newFile = await newFolder.GetNode("NewFile.txt");
var writedStream = await newFile.Read();
stream.ToArray().SequenceEqual(writedStream.ToArray());
}
Move folder/file:
// ** SMB1 NOT Supported. **
//using EzSmb;
//using System;
//using System.Threading.Tasks;
// Get Node of file.
var file = await Node.GetNode(@"192.168.0.1\ShareName\FileName.txt", "userName", "password");
// Move to child folder path.
// ** Even if you don't change the file/folder name, write the name. **
var movedFile = await file.Move(@"FolderName\RenamedFileName.txt");
Console.WriteLine(movedFile.FullPath);
// -> 192.168.0.1\ShareName\FolderName\RenamedFileName.txt
// Get Node of folder.
var folder = await Node.GetNode(@"192.168.0.1\ShareName\FolderName\SubFolderName", "userName", "password");
// Move to Parent path.
var movedFolder = await folder.Move(@"..\RenamedSubFolderName");
Console.WriteLine(movedFolder.FullPath);
// -> 192.168.0.1\ShareName\RenamedSubFolderName
Delete folder/file:
//using EzSmb;
//using System;
//using System.Threading.Tasks;
// Get Node of file.
var file = await Node.GetNode(@"192.168.0.1\ShareName\FileName.txt", "userName", "password");
// Delete file.
await file.Delete();
// Get Node of folder.
var folder = await Node.GetNode(@"192.168.0.1\ShareName\FolderName\SubFolderName", "userName", "password");
// Delete file on folder.
await folder.Delete("child.txt");
// Delete folder.
// ** If the folder still has subfolders or files, cannot delete it. **
await folder.Delete();
Scan servers & shares on LAN:
// ** Supported only IPv4 Private Address Network. **
// ** And, if the subnet range exceeds 1024, scan will skip that network interface. **
//using EzSmb;
//using System;
//using System.Threading.Tasks;
// Get IP-Address string array.
var ipStrings = await Node.GetServers();
foreach (var ipString in ipStrings)
{
try
{
// Try connect.
var server = await Node.GetNode(ipString);
// Connect succeeded.
Console.WriteLine($"Server[{server.Name}] connected.");
// Get Share List.
var shares = await server.GetList();
foreach (var share in shares)
{
Console.WriteLine($"Found Share on Server[{server.Name}]: {share.Name}");
}
}
catch (Exception)
{
// Connect failed.
Console.WriteLine($"Server[{ipString}] requires authentication.");
}
}
Authentication:
//using EzSmb;
//using EzSmb.Params;
//using EzSmb.Params.Enums;
//using System.Threading.Tasks;
// Normally.
var server1 = await Node.GetNode("192.168.0.1", "userName", "password");
// Connect by Anonymous User.
var server2 = await Node.GetNode("192.168.0.1");
// Connect with specified SMB version.
var server3 = await Node.GetNode("192.168.0.1", new ParamSet()
{
UserName = "userName",
Password = "password",
SmbType = SmbType.Smb1
});
// Connect by Windows-Domain Authentication. ** Not Supported SMB1 **
var server4 = await Node.GetNode("192.168.0.1", new ParamSet()
{
UserName = "domainUserName",
Password = "password",
DomainName = "domainname.local"
});
Random access by Stream:
//using EzSmb;
//using System;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
var file = await Node.GetNode(@"192.168.0.1\ShareName\FolderName\FileName.txt", "userName", "password");
using (var stream = file.GetReaderStream())
{
var bytes1 = new byte[1024];
var bytes2 = new byte[32];
// Skip a few bytes.
stream.Position = 64;
var readed1 = stream.Read(bytes1, 0, 1024);
Console.WriteLine(Encoding.UTF8.GetString(bytes1.Take(readed1).ToArray()));
// Access from the end.
stream.Seek(-32, SeekOrigin.End);
var readed2 = await stream.ReadAsync(bytes2.AsMemory(0, 32));
Console.WriteLine(Encoding.UTF8.GetString(bytes2.Take(readed2).ToArray()));
}
Get errors:
//using EzSmb;
//using System;
//using System.Threading.Tasks;
var file = await Node.GetNode(@"192.168.0.1\ShareName\FileName.txt", "userName", "password");
var nodes = await file.GetList();
// nodes is null.
Console.WriteLine($"file has error? : {file.HasError}");
// -> file has error? : true
foreach (var err in file.Errors)
Console.WriteLine(err);
// -> [timestamp]: [namespace.class.method] error message.