You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libiec61850/dotnet/files/FileServicesExample.cs

93 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using IEC61850.Client;
using IEC61850.Common;
using System.IO;
namespace files
{
/// <summary>
/// This example connects to an IEC 61850 device, list the available files, and then
/// tries to read the file "IEDSERVER.BIN" from the server.
/// </summary>
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 ();
}
}
}