Note

Cette documentation est en cours de rédaction. Elle peut contenir des erreurs et des informations peuvent manquer. Si vous avez des commentaires ou questions, merci de nous contacter sur la liste de diffusion unitex-devel ou de remplir un rapport de bogue en utilisant notre système de suivi des incidents.

Accès aux fichiers et système de fichiers virtuel

Les outils Unitex utilisent beaucoup d’accès fichier pour s’échanger des informations. Afin d’économiser les accès disque, il est possible d’utiliser des fichiers virtuels (VFS), qui sont écrits en mémoire.

Les fichiers virtuels se reconnaissent à un préfixe :

Prefix Implementation License
$: système de fichiers virtuel intégré à partir Unitex 3.0. LGPLv2
*: système de fichiers virtuel optimisé Ergonotics pour Unitex 2.1 ou 3.0 Propriétaire

Il existe des fonctions d’accès simplifiées aux fichiers, qui sont compatibles à la fois avec le système de fichiers virtuel et les fichiers du système de fichiers standard.

C

Note

Pour toutes les fonctions qui manipulant les fichiers avec des buffers binaires, c’est à l’application appelante de gérer la problématique d’encodage Unicode (UTF8 ou UTF16).

Indice

Le système de fichier virtuel n’ayant pas de notion de répertoire, les caractères : (deux-points), / (barre oblique) et \ (barre oblique inversée) sont traités comme les autres, ce qui permet, in fine, d’avoir un comportement compatible.

UnitexAbstractPathExists

UnitexAbstractPathExists permet de savoir si un préfixe correspond à un système de fichiers virtuel.

int UnitexAbstractPathExists(const char* path);

Ainsi, l’exemple suivant retournera le système de fichier virtuel le plus optimisé disponible sous Unitex 3.0 :

const char* getVirtualFilePrefix() {
  if (UnitexAbstractPathExists("*:") != 0) {
    return "*:";
  }

  if (UnitexAbstractPathExists("$:") != 0) {
    return "$:";
  }

  return NULL;
}

GetUnitexFileReadBuffer

GetUnitexFileReadBuffer permet d’obtenir un pointeur en lecture seule sur le contenu d’un fichier. Ce pointeur sera valide jusqu’à l’appel de la fonction CloseUnitexFileReadBuffer correspondant,

Avertissement

Le fichier ne doit en aucun cas être modifié (et à plus forte raison supprimé) entre l’appel de GetUnitexFileReadBuffer et de CloseUnitexFileReadBuffer.

void GetUnitexFileReadBuffer(const char*  name, UNITEXFILEMAPPED** amf,
                             const void** buffer, size_t* size_file);

WriteUnitexFile

WriteUnitexFile permet de créer un fichier à partir d’un ou deux buffers binaires (si un seul buffer est utile, il suffira de positionner buffer_suffix à NULL et size_suffix à 0).

int WriteUnitexFile(const char* name, const void* buffer_prefix, size_t size_prefix,
                                     const void* buffer_suffix,size_t size_suffix);

AppendUnitexFile

AppendUnitexFile permet d’ajouter du contenu à la fin d’un fichier.

int AppendUnitexFile(const char* name,const void* buffer_data,size_t size_data);

RemoveUnitexFile

RemoveUnitexFile permet de supprimer un fichier.

int RemoveUnitexFile(const char* name);

RenameUnitexFile

RenameUnitexFile permet de renommer un fichier.

int RenameUnitexFile(const char* oldName,const char* newName);

CopyUnitexFile

CopyUnitexFile permet de copier un fichier. Notons que cette function est capable de copier un fichier entre le système de fichiers virtuel et le système de fichiers standard (dans les 2 sens).

int CopyUnitexFile(const char* srcName,const char* dstName);

CreateUnitexFolder

CreateUnitexFolder n’agit que pour le système de fichier standard et permet de créer un répertoire.

int CreateUnitexFolder(const char* name);

RemoveUnitexFolder

RemoveUnitexFolder permet de supprimer un répertoire (dans le système de fichiers standard) ou de supprimer tous les fichiers avec un préfixe donné (dans le système de fichier virtuel).

int RemoveUnitexFolder(const char* name);

Java

numberAbstractFileSpaceInstalled

/**
 * function to known how many abstract file system are installed
 *
 * @return the number of Abstract file system installed in Unitex
 */
public native static int numberAbstractFileSpaceInstalled();

writeUnitexFile

/**
 * writeUnitexFile* function create file to be used by Unitex.
 */
/**
 * create a file from a raw binary char array
 */
public native static boolean writeUnitexFile(String fileName,
                                             char[] fileContent);

/**
 * create a file from a raw binary byte array
 */
public native static boolean writeUnitexFile(String fileName,
                                             byte[] fileContent);

/**
 * create a file from a string using UTF16LE encoding with BOM (native
 * Unitex format)
 */
public native static boolean writeUnitexFile(String fileName,
                                             String fileContent);

/**
 * create a file from a string using UTF8 encoding without BOM
 */
public native static boolean writeUnitexFileUtf(String fileName,
                                                String fileContent);

/**
 * create a file from a string using UTF8 encoding with or without BOM
 */
public native static boolean writeUnitexFileUtf(String fileName,
                                                String fileContent,
                                                boolean isBom);

appendUnitexFile

/**
 * append to a file a raw binary byte array
 */
public native static boolean appendUnitexFile(String fileName,
    byte[] fileContent);

getUnitexFileDataChar

/**
 * read a file to a raw binary char array representation
 */
public native static char[] getUnitexFileDataChar(String fileName);

getUnitexFileData

/**
 * read a file to a raw binary byte array representation
 */
public native static byte[] getUnitexFileData(String fileName);

getUnitexFileString

/**
 * read and decode a file to a string.
 */
public native static String getUnitexFileString(String fileName);

removeUnitexFile

/**
 * remove a file
 */
public native static boolean removeUnitexFile(String fileName);

createUnitexFolder

/**
 * create a folder, if needed
 */
public native static boolean createUnitexFolder(String folderName);

removeUnitexFolder

/**
 * remove a folder and the folder content
 */
public native static boolean removeUnitexFolder(String folderName);

renameUnitexFile

/**
 * rename a file
 */
public native static boolean renameUnitexFile(String fileNameSrc,
    String fileNameDst);

copyUnitexFile

/**
 * copy a file
 */
public native static boolean copyUnitexFile(String fileNameSrc,
    String fileNameDst);

unitexAbstractPathExists

/**
 * tests whether a path is already present in Unitex's abstact file space
 */
public native static boolean unitexAbstractPathExists(String path);

Example:

public String getVirtualFilePrefix() {
  if (UnitexJni.unitexAbstractPathExists("*")) {
    return "*";
  }

  if (UnitexJni.unitexAbstractPathExists("$:")) {
    return "$:";
  }

  return null;
}

getFileList

/**
 * retrieve array of file in abstract space
 */
public native static String[] getFileList(String path);