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.