libiec61850/dotnet/files/FileServicesExample.cs

92 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using IEC61850.Client;
using IEC61850.Common;
using System.IO;
namespace files
{
class MainClass
{
public static void printFiles (IedConnection con, string prefix, string parent)
{
List<FileDirectoryEntry> files = con.GetFileDirectory (parent);
foreach (FileDirectoryEntry file in files) {
Console.WriteLine(prefix + file.GetFileName() + "\t" + file.GetFileSize() + "\t" +
MmsValue.MsTimeToDateTimeOffset(file.GetLastModified()));
if (file.GetFileName().EndsWith("/")) {
printFiles (con, prefix + " ", parent + file.GetFileName());
}
}
}
static bool getFileHandler (object parameter, byte[] data)
{
Console.WriteLine("received " + data.Length + " bytes");
BinaryWriter binWriter = (BinaryWriter) parameter;
binWriter.Write(data);
return true;
}
public static void Main (string[] args)
{
IedConnection con = new IedConnection ();
string hostname;
if (args.Length > 0)
hostname = args[0];
else
hostname = "10.0.2.2";
Console.WriteLine("Connect to " + hostname);
try
{
con.Connect(hostname, 102);
Console.WriteLine ("Files in server root directory:");
List<string> serverDirectory = con.GetServerDirectory(true);
foreach (string entry in serverDirectory) {
Console.WriteLine(entry);
}
Console.WriteLine();
Console.WriteLine ("File directory tree at server:");
printFiles(con, "", "");
Console.WriteLine();
string filename = "IEDSERVER.BIN";
Console.WriteLine("Download file " + filename);
/* Download file from server and write it to a new local file */
FileStream fs = new FileStream(filename, FileMode.Create);
BinaryWriter w = new BinaryWriter(fs);
con.GetFile(filename, new IedConnection.GetFileHandler(getFileHandler), w);
fs.Close();
con.Abort();
}
catch (IedConnectionException e)
{
Console.WriteLine(e.Message);
}
// release all resources - do NOT use the object after this call!!
con.Dispose ();
}
}
}