Click or drag to resize

IFile Interface

Represents a file object that can store arbitrary (binary) content. The file implementation manages multipe versions of the content.

Namespace:  PDTec.IceNet.Core.Model.File
Assembly:  PDTec.IceNet.Core (in PDTec.IceNet.Core.dll) Version: 7.2.0.0 (7.2.7583.15464)
Syntax
C#
public interface IFile : IObject

The IFile type exposes the following members.

Properties
  NameDescription
Public propertyChangedBy
Gets the name of the user who changed the object last.
(Inherited from IObject.)
Public propertyChangedOn
Gets the point of time the object was changed last.
(Inherited from IObject.)
Public propertyCreatedBy
Gets the name of the user who created the object.
(Inherited from IObject.)
Public propertyCreatedOn
Gets the point of time the object was created.
(Inherited from IObject.)
Public propertyDescription
Gets or sets the object description. The description can be empty.
(Inherited from IObject.)
Public propertyExtension
Gets or sets the file extension.
Public propertyFolder
Gets the containing folder.
(Inherited from IObject.)
Public propertyId
Gets the object ID. The ID is generated by the platform and cannot be modified.
(Inherited from IObject.)
Public propertyIsLocked
Indicates if the object is locked.
(Inherited from IObject.)
Public propertyIsValid
Indicates if the object instance is valid. The object becomes invalid if the Destroy method has been called.
(Inherited from IObject.)
Public propertyLockedBy
Gets the name of the user who holds a lock on the object, empty string if the object is not locked.
(Inherited from IObject.)
Public propertyLockedOn
Gets the lock timestamp, if object is locked. DateTime.MinValue if not.
(Inherited from IObject.)
Public propertyName
Gets or sets the object name. The name cannot be an empty string. It is modifiable and does not have to be unique.
(Inherited from IObject.)
Public propertyObjType
Gets the object type.
(Inherited from IObject.)
Top
Methods
  NameDescription
Public methodAddKey
Adds a new key to the object. The key must be unique within the system context (e.g. unique per database).
(Inherited from IObject.)
Public methodAppendContent
Appends content at the end of the most current version. If there is no version so far, the method fails.
Public methodAsT Obsolete.
Casts to a Business Object interface.
(Inherited from IObject.)
Public methodCastT
Casts to a Business Object interface. Throws an exception if the Business Object interface is not available for this object.
(Inherited from IObject.)
Public methodChangeObjType
Change the object type.
(Inherited from IObject.)
Public methodConnectContent
Connects an existing file content as the most current version to the file object.
Public methodCopyTo
Copies the object. Attributes of the object are copied, relationships not.
(Inherited from IObject.)
Public methodDeleteKey
Removes a key from the object.
(Inherited from IObject.)
Public methodDestroy
Deletes the object (and its relationships).
(Inherited from IObject.)
Public methodDestroyContentVersion
Deletes a specific content version.
Public methodGetAttrValue(IAttrDef)
Retrieves the specified attribute value.
(Inherited from IObject.)
Public methodGetAttrValue(String, String)
Retrieves the specified attribute value.
(Inherited from IObject.)
Public methodGetAttrValue(IAttrDef, Boolean) Obsolete.
Retrieves the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodGetAttrValue(String, String, Boolean) Obsolete.
Retrieves the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodGetAttrValues
Get all attribute values of the object.
(Inherited from IObject.)
Public methodGetContentSize
Retrieves the size of the latest version (in bytes).
Public methodGetContentSize(Int64)
Retrieves the size of a specific version (in bytes).
Public methodGetContentVersion
Gets the specific content version.
Public methodGetContentVersions
Retrieves all content versions in the default order (first version comes first, current version has the index GetContentVersions().Length - 1.
Public methodGetFolder
Retrieves the object's folder.
(Inherited from IObject.)
Public methodGetKeys
Retrieves the object's (unique) keys.
(Inherited from IObject.)
Public methodGetLockInfo
Retrieves information about the object's lock status.
(Inherited from IObject.)
Public methodGetObjType
Retrieve the object type.
(Inherited from IObject.)
Public methodGetRelationships(RelDirection)
Retrieves all attached relationships of a specific direction (regardless of their relationship type).
(Inherited from IObject.)
Public methodGetRelationships(String, RelDirection)
Retrieves all attached relationships of a specific role (relationship type/direction combination).
(Inherited from IObject.)
Public methodGetRelationships(IRelType, RelDirection)
Retrieves all attached relationships of a specific relationship type in a specific direction.
(Inherited from IObject.)
Public methodGetSingleRelationship(String, RelDirection)
Retrieves a single relationship (omit the array overhead).
(Inherited from IObject.)
Public methodGetSingleRelationship(IRelType, RelDirection)
Retrieves a single relationship (omit the array overhead).
(Inherited from IObject.)
Public methodGetTableAttrTemplateRow
Gets a table attribute template row.
(Inherited from IObject.)
Public methodGetTableAttrValues
Gets the table attribute values.
(Inherited from IObject.)
Public methodIsOf(String)
Indicates if the object conforms to a specific object type directly or indirectly (is a subtype of).
(Inherited from IObject.)
Public methodIsOf(IObjType)
Indicates if the object conforms to a specific object type directly or indirectly (is a subtype of).
(Inherited from IObject.)
Public methodLock
Lock the object.
(Inherited from IObject.)
Public methodMoveTo
Moves the object to another folder.
(Inherited from IObject.)
Public methodQueryInterface
Cast to a Business Object interface.
(Inherited from IObject.)
Public methodReadContent(Byte)
Retrieves the content of the current version.
Public methodReadContent(Int64, Byte)
Retrieves the content of a specific version.
Public methodReadContentPart(Int64, Int32, Byte)
Retrieves the binary file content of the latest version.
Public methodReadContentPart(Int64, Int64, Int32, Byte)
Retrieves the binary file content of a specific version.
Public methodReload
Refreshes the object data from secondary storage (e.g. database) if available. Use this method to retrieve up-to-date audit information (ChangedBy, ChangedOn properties).
(Inherited from IObject.)
Public methodSetAttrValue(IAttrDef, Object)
Stores the specified attribute value.
(Inherited from IObject.)
Public methodSetAttrValue(String, String, Object)
Stores the specified attribute value.
(Inherited from IObject.)
Public methodSetAttrValues
Set multiple attribute values with a single method call.
(Inherited from IObject.)
Public methodSetRelationshipIndex
Re-position a relationship within the object/reltype/direction order.
(Inherited from IObject.)
Public methodSetRelationshipIndices
Re-order all relationships of a object/reltype/direction context.
(Inherited from IObject.)
Public methodSetTableAttrValues
Sets the table attribute values.
(Inherited from IObject.)
Public methodTouch
Updates the ChangedBy and ChangedOn information.
(Inherited from IObject.)
Public methodTryCastT
Casts to a Business Object interface.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, Boolean)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, DateTime)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, Double)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, Int64)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, Object)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(IAttrDef, String)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, Boolean)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, DateTime)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, Double)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, Int64)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, Object)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetAttrValue(String, String, String)
Attempts to get the specified attribute value and indicates if the value is assigned.
(Inherited from IObject.)
Public methodTryGetContentVersion
Tries the get a specific content version.
Public methodTryGetSingleRelationship(String, RelDirection, IRelationship)
Tries to retrieves a single relationship.
(Inherited from IObject.)
Public methodTryGetSingleRelationship(IRelType, RelDirection, IRelationship)
Tries to retrieves a single relationship.
(Inherited from IObject.)
Public methodUnLock
Unlock the object.
(Inherited from IObject.)
Public methodUpdateContentVersion
Updates the data of a specific version.
Public methodWriteContent
Stores binary file content as the most current version of the file object.
Top
Extension Methods
  NameDescription
Public Extension MethodGetFolderId
Gets the folder ID without unneccessarily retrieving the full folder information.
(Defined by ModelExtensions.)
Public Extension MethodGetRepository
Gets the corresponding repository for an object.
(Defined by ModelExtensions.)
Public Extension MethodIsConnected(String, RelDirection)Overloaded.
Detects whether an object is connected by at least one relationship of a specific type.
(Defined by ModelExtensions.)
Public Extension MethodIsConnected(IRelType, RelDirection)Overloaded.
Detects whether an object is connected by at least one relationship of a specific type.
(Defined by ModelExtensions.)
Top
Examples

This example explains how to use the IFile interface to read and write file content.

The following code shows how to create a file object and to store binary content into the built-in vault System.Database:

C#
IObjType pFileObjType = m_pRepository.GetObjTypeByName("Core.File");
byte[] aContent = Encoding.ASCII.GetBytes("FILECONTENT");

Repository.ExecuteTransaction(delegate()
{
    // Create a file object...
    IFile pFile = pFileObjType.Create<IFile>(m_pRepository.RootFolder, "F1", "");

    // Store content (implicitly creates a first content version)......
    pFile.WriteContent(true, "", "System.Database", "f1.txt", aContent);
});

The following code shows how read binary content from a file:

C#
IFile pFile = Repository.Get<IFile>(objectId);
byte[] aContent;

// Reads file content from the current (most recent) file version into buffer...
pFile.ReadContent(out aContent);

// Gets the file size of the current version...
long size = pFile.GetContentSize();

// Reads file content with offset and partial size parameters...
pFile.ReadContentPart(0, (int)size, out aContent);

The following code shows how to use the AppendContent function to subsequently add content to a file:

C#
IObjType pFileObjType = m_pRepository.GetObjTypeByName("Core.File");

byte[] aContent0 = Encoding.ASCII.GetBytes("F");
byte[] aContent1 = Encoding.ASCII.GetBytes("1");

Repository.ExecuteTransaction(delegate()
{
    // Create a file object...
    IFile pFile = pFileObjType.Create<IFile>(m_pRepository.RootFolder, "F1", "");

    // Store initial content (implicitly creates a first content version)...
    pFile.WriteContent(true, "description", "System.Database", "f1.txt", aContent0);

    // Append content to the current version...    
    pFile.AppendContent(aContent1);
});
Examples

This example explains how to work with vaults and file content directly. This can be useful to implement a transactional safe Web uploading process that enables to upload large files in parts, where the whole uploading process cannot be encapsulated in a single database transaction for HTTP request memory size and timeout reasons:

  • Create a FileContent record in the database and retrieve its UUID.
  • Upload the file content in several sequential steps.
  • Create the File object and connect the FileContent record.

This procedure ensures that if the upload process fails at one point, the file object does not appear in the database at all. This avoids broken file objects. Unconnected FileContents can be identified and removed easily by a vault utility.

The following code shows how to create a file in several steps and how the individual transactions can be separated from each other.

C#
byte[] aContent = Encoding.ASCII.GetBytes("1234567890");

IVault pVault = Repository.GetVaultByName("System.Database");

string contentUuid = null;

// 
// First step: create a FileContent record in the database...
// 

string hash = FileUtils.CalculateHash(aContent);

Repository.ExecuteTransaction(delegate
{
    contentUuid = pVault.CreateFileContent(aContent.Length, hash).Uuid;
});

// 
// Second step: Use the IVaultProtocol of the vault to upload the content...
// 

IVaultProtocol pProtocol = pVault.GetProtocol();

string correlationId = CreateFileContentPartStart(contentUuid);

pProtocol.CreateFileContentPartContinue(contentUuid, correlationId, 0, aContent.Take(5).ToArray());

pProtocol.CreateFileContentPartContinue(contentUuid, correlationId, 1, aContent.Skip(5).ToArray());

pProtocol.CreateFileContentPartComplete(contentUuid, correlationId, 2);

// 
// Final step: Create the File object and connect the FileContent as a new content version...
// 

IFile pFile = null;

Repository.ExecuteTransaction(delegate
{
    pFile = Repository.GetObjTypeByName("Core.File").Create<IFile>(Repository.RootFolder, "F1", "");

    pFile.ConnectContent(true, "", "test.txt", contentUuid);
});
See Also