OPC Studio User's Guide and Reference
CreateFile Method (EasyUAFileTransferClientCore)
Example 



OpcLabs.EasyOpcUA Assembly > OpcLabs.EasyOpc.UA.FileTransfer Namespace > EasyUAFileTransferClientCore Class : CreateFile Method
Endpoint descriptor. Identifies the OPC-UA server.
Node descriptor of the OPC UA directory.
The name of the file to create.
Indicates whether the created file should be immediately opened.
Creates a new OPC UA file, organized under an existing directory, and optionally opens it.
Syntax
'Declaration
 
Public Function CreateFile( _
   ByVal endpointDescriptor As UAEndpointDescriptor, _
   ByVal directoryNodeDescriptor As UANodeDescriptor, _
   ByVal fileName As String, _
   ByVal openFile As Boolean _
) As ValueTuple(Of UANodeId,UAFileHandle)
'Usage
 
Dim instance As EasyUAFileTransferClientCore
Dim endpointDescriptor As UAEndpointDescriptor
Dim directoryNodeDescriptor As UANodeDescriptor
Dim fileName As String
Dim openFile As Boolean
Dim value As ValueTuple(Of UANodeId,UAFileHandle)
 
value = instance.CreateFile(endpointDescriptor, directoryNodeDescriptor, fileName, openFile)

Parameters

endpointDescriptor
Endpoint descriptor. Identifies the OPC-UA server.
directoryNodeDescriptor
Node descriptor of the OPC UA directory.
fileName
The name of the file to create.
openFile
Indicates whether the created file should be immediately opened.

Return Value

Returns a tuple, consisting of a node Id of the newly created file object (OpcLabs.EasyOpc.UA.AddressSpace.UANodeId), and an OPC UA file handle that can be used to access the file (UAFileHandle). The OPC UA file handle is non-null when the openFile is set to true; otherwise, the returned OPC UA file handle is a null reference.
Exceptions
ExceptionDescription

A null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument.

This is a usage error, i.e. it will never occur (the exception will not be thrown) in a correctly written program. Your code should not catch this exception.

The OPC UA operation has failed. This operation exception in uniformly used to allow common handling of various kinds of errors. The System.Exception.InnerException always contains information about the actual error cause.

This is an operation error that depends on factors external to your program, and thus cannot be always avoided. Your code must handle it appropriately.

Remarks

This method corresponds to (but is not fully identical with) the OPC UA File Transfer Method .

The directoryNodeDescriptor must be an existing node in the server, of object type OpcLabs.EasyOpc.UA.AddressSpace.Standard.UAObjectTypeIds.FileDirectoryType.

The fileName "is used for the BrowseName and DisplayName of the file object and also for the file in the file system. For the BrowseName, the fileName is used for the name part of the QualifiedName. The namespace index is Server specific. For the DisplayName, the fileName is used for the text part of the LocalizedText. The locale part is Server specific."

The openFile indicates "if the new file should be opened with the Write and Read bits set in the open mode after the creation of the file. If the flag is set to True, the file is created and opened for writing. If the flag is set to False, the file is just created."

"The fileNodeId and the fileHandle [output arguments] can be used to access the new file through the FileType Object representing the new file."

If you use this method to also open the file created (with openFile set to true), make sure you eventually close the file (using the CloseFile method), and also explicitly call System.IDisposable.Dispose on the file handle returned from CreateFile. The OPC UA file handle, until disposed of, causes the client to keep a session open on the server.

This method will throw an exception if the file you are attempting to create already exists.

Recommendation: Whenever possible, do not use this method directly, and use a higher-level abstraction instead. You can create System.IO.Stream objects for accessing the file data by using methods like OpcLabs.EasyOpc.UA.IO.Extensions.IEasyUAFileTransferExtension2.OpenOrCreateStream, or obtain them through a file provider (using IEasyUAFileTransferExtension.GetFileProvider2 or IEasyUAFileTransferExtension.GetWritableFileProvider).

See OPC UA File Transfer internals for information about Connection locking.

Example

.NET

// Shows how to create and delete OPC UA files, using the file transfer client.
// Note: Consider using a higher-level abstraction, OPC UA file provider, instead.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .

using System;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.AddressSpace;
using OpcLabs.EasyOpc.UA.Extensions;
using OpcLabs.EasyOpc.UA.FileTransfer;
using OpcLabs.EasyOpc.UA.OperationModel;

namespace UADocExamples.FileTransfer._EasyUAFileTransferClient
{
    class CreateFileAndDelete
    {
        public static void Main1()
        {
            // Unified Automation .NET based demo server (UaNETServer/UaServerNET.exe)
            var endpointDescriptor = new UAEndpointDescriptor("opc.tcp://localhost:48030")
                .WithUserNameIdentity("john", "master");

            // An object that aggregates an OPC UA file system.
            UANodeDescriptor objectDescriptor = "nsu=http://www.unifiedautomation.com/DemoServer/ ;s=Demo.Files";

            // Create a random number generator - will be used for file/directory names.
            var random = new Random();
            
            // Instantiate the file transfer client object
            var fileTransferClient = new EasyUAFileTransferClient();

            // Create two files, and delete the first one.
            try
            {
                // The file system node is a root directory of the file system.
                Console.WriteLine("Getting file system...");
                UANodeDescriptor fileSystemNodeDescriptor = fileTransferClient.GetFileSystem(endpointDescriptor, objectDescriptor);

                string fileName1 = "MyFile1-" + random.Next();
                Console.WriteLine($"Creating first file, '{fileName1}'...");
                UANodeId fileNodeId1 = fileTransferClient.CreateFile(endpointDescriptor, fileSystemNodeDescriptor, fileName1);
                Console.WriteLine($"Node Id of the first file: {fileNodeId1}");

                string fileName2 = "MyFile2-" + random.Next();
                Console.WriteLine($"Creating second file, '{fileName2}'...");
                UANodeId fileNodeId2 = fileTransferClient.CreateFile(endpointDescriptor, fileSystemNodeDescriptor, fileName2);
                Console.WriteLine($"Node Id of the second file: {fileNodeId2}");

                Console.WriteLine("Deleting the first file...");
                fileTransferClient.DeleteFile(endpointDescriptor, fileSystemNodeDescriptor, fileName1);
            }
            catch (UAException uaException)
            {
                Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message);
                return;
            }

            Console.WriteLine("Finished...");
        }
    }
}
# Shows how to create and delete OPC UA files, using the file transfer client.
# Note: Consider using a higher-level abstraction, OPC UA file provider, instead.
#
# Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
# OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python .
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
import random

# Import .NET namespaces.
from OpcLabs.EasyOpc.UA import *
from OpcLabs.EasyOpc.UA.Extensions import *
from OpcLabs.EasyOpc.UA.FileTransfer import *
from OpcLabs.EasyOpc.UA.OperationModel import *


# Unified Automation .NET based demo server (UaNETServer/UaServerNET.exe).
endpointDescriptor = UAEndpointDescriptor('opc.tcp://localhost:48030')
endpointDescriptor = UAEndpointDescriptorExtension.WithUserNameIdentity(endpointDescriptor,'john', 'master')

# An object that aggregates an OPC UA file system.
objectDescriptor = UANodeDescriptor('nsu=http://www.unifiedautomation.com/DemoServer/ ;s=Demo.Files')

# Create a random number generator - will be used for file/directory names.
random = random.Random()

# Instantiate the file transfer client object.
fileTransferClient = EasyUAFileTransferClient()

# Prevent prompt to trust the server certificate (INSECURE, used just for smooth example flow).
EasyUAClient.SharedParameters.EngineParameters.CertificateAcceptancePolicy.TrustEndpointUrlString(
    endpointDescriptor.UrlString)

# Create two files, and delete the first one.
try:
    # The file system node is a root directory of the file system.
    print('Getting file system...')
    fileSystemNodeDescriptor = IEasyUAFileTransferExtension.GetFileSystem(fileTransferClient,
                                                                          endpointDescriptor, objectDescriptor)

    fileName1 = 'MyFile1-' + str(random.randint(0, 999_999_999))
    print("Creating first file, '", fileName1, "'...", sep='')
    fileNodeId1 = IEasyUAFileTransferExtension.CreateFile(fileTransferClient,
                                                          endpointDescriptor, fileSystemNodeDescriptor, fileName1)
    print('Node Id of the first file: ', fileNodeId1, sep='')

    fileName2 = 'MyFile2-' + str(random.randint(0, 999_999_999))
    print("Creating second file, '", fileName2, "'...", sep='')
    fileNodeId2 = IEasyUAFileTransferExtension.CreateFile(fileTransferClient,
                                                          endpointDescriptor, fileSystemNodeDescriptor, fileName2)
    print('Node Id of the second file: ', fileNodeId2, sep='')

    print('Deleting the first file...')
    IEasyUAFileTransferExtension.DeleteFile(fileTransferClient,
                                            endpointDescriptor, fileSystemNodeDescriptor, fileName1)

except UAException as uaException:
    print('*** Failure: ' + uaException.GetBaseException().Message)
    exit()

print()
print('Finished.')
' Shows how to create and delete OPC UA files, using the file transfer client.
' Note: Consider using a higher-level abstraction, OPC UA file provider, instead.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .

Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.AddressSpace
Imports OpcLabs.EasyOpc.UA.Extensions
Imports OpcLabs.EasyOpc.UA.FileTransfer
Imports OpcLabs.EasyOpc.UA.OperationModel

Namespace FileTransfer._EasyUAFileTransferClient

    Friend Class CreateFileAndDelete

        Public Shared Sub Main1()

            ' Unified Automation .NET based demo server (UaNETServer/UaServerNET.exe)
            Dim endpointDescriptor As UAEndpointDescriptor =
                New UAEndpointDescriptor("opc.tcp://localhost:48030") _
                .WithUserNameIdentity("john", "master")

            ' An object that aggregates an OPC UA file system.
            Dim objectDescriptor As UANodeDescriptor = "nsu=http://www.unifiedautomation.com/DemoServer/ ;s=Demo.Files"

            ' Create a random number generator - will be used for file/directory names.
            Dim random = New Random

            ' Instantiate the file transfer client object
            Dim fileTransferClient = New EasyUAFileTransferClient

            ' Create two files, and delete the first one.
            Try
                ' The file system node is a root directory of the file system.
                Console.WriteLine("Getting file system...")
                Dim fileSystemNodeDescriptor As UANodeDescriptor = fileTransferClient.GetFileSystem(endpointDescriptor, objectDescriptor)

                Dim fileName1 As String = "MyFile1-" & random.Next()
                Console.WriteLine($"Creating first file, '{fileName1}'...")
                Dim fileNodeId1 As UANodeId = fileTransferClient.CreateFile(endpointDescriptor, fileSystemNodeDescriptor, fileName1)
                Console.WriteLine($"Node Id of the first file: {fileNodeId1}")

                Dim fileName2 As String = "MyFile2-" & random.Next()
                Console.WriteLine($"Creating second file, '{fileName2}'...")
                Dim fileNodeId2 As UANodeId = fileTransferClient.CreateFile(endpointDescriptor, fileSystemNodeDescriptor, fileName2)
                Console.WriteLine($"Node Id of the second file: {fileNodeId2}")

                Console.WriteLine("Deleting the first file...")
                fileTransferClient.DeleteFile(endpointDescriptor, fileSystemNodeDescriptor, fileName1)
            Catch uaException As UAException
                Console.WriteLine("*** Failure: {0}", uaException.GetBaseException.Message)
                Exit Sub
            End Try

            Console.WriteLine("Finished...")
        End Sub
    End Class
End Namespace
Requirements

Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2016, Windows Server 2022; .NET: Linux, macOS, Microsoft Windows

See Also