Example #1
0
        static void Main(string[] args)
        {
            try
            {
                FPLogger.ConsoleMessage("\nCluster to connect to [" + defaultCluster + "] : ");
                String clusterAddress = System.Console.ReadLine();
                if ("" == clusterAddress)
                {
                    clusterAddress = defaultCluster;
                }

                UTF8Encoding converter2 = new UTF8Encoding();

                // We are going to create a filename containing Chinese characters

                byte[] inputFileName = { 0xE6, 0x98, 0x8E, 0xE5, 0xA4, 0xA9, 0x2E, 0x74, 0x78, 0x74 };
                string fileName      = System.Text.Encoding.UTF8.GetString(inputFileName);
                File.WriteAllText(fileName, "Test file with wide characters in the file name\n");

                FPLogger.ConsoleMessage("\nEnter the threshold to use for Embedded Blobs: ");
                String blobString = System.Console.ReadLine();

                if (blobString == "")
                {
                    blobString = "0";
                }
                int blobThreshold = Int32.Parse(blobString);

                if (blobThreshold > 0)
                {
                    FPLogger.ConsoleMessage("\nContent less than " + blobString + " bytes will be embedded in the CDF.");
                }
                else
                {
                    FPLogger.ConsoleMessage("\nContent will never be embedded in the CDF.");
                }

                FPPool.EmbeddedBlobThreshold = blobThreshold;
                FPPool thePool = new FPPool(clusterAddress);

                // Create the clip
                FPClip clipRef = new FPClip(thePool, "UTF8_Example");
                clipRef.SetAttribute("OriginalFilename", fileName);

                FPTag fileTag = clipRef.AddTag("WideFilenameTag");
                fileTag.SetAttribute("filename", fileName);

                // Write the content of the file to the Centera
                FPStream streamRef = new FPWideFilenameStream(fileName);
                fileTag.BlobWrite(streamRef, FPMisc.OPTION_CLIENT_CALCID);
                streamRef.Close();

                long blobSize = fileTag.BlobSize;

                if (blobThreshold > 0 && blobSize < blobThreshold)
                {
                    FPLogger.ConsoleMessage("\nContent was embedded in the CDF as size "
                                            + blobSize
                                            + " is less than the threshold.");
                }

                fileTag.Close();
                fileTag = clipRef.AddTag("TestTag");

                fileTag.SetAttribute("fileCabinetGuid", "52d9cf57-7261-472a-b6d9-a8cdd30d1d27");
                fileTag.SetAttribute("attr2", "a second attribute");
                fileTag.SetAttribute("anotherattr", "the third attribute");

                /* Or you can write from a memory buffer holding the data
                 * The exampe uses a byte array containing a string
                 */
                UTF8Encoding converter = new UTF8Encoding();
                byte[]       rawBuffer = converter.GetBytes("This is a test string to illustrate how to interface to Centera using a buffer stream");
                IntPtr       source    = Marshal.AllocHGlobal(rawBuffer.Length);
                Marshal.Copy(rawBuffer, 0, source, rawBuffer.Length);
                streamRef = new FPStream(source, rawBuffer.Length, FPStream.StreamDirection.InputToCentera);
                fileTag.BlobWrite(streamRef, FPMisc.OPTION_CLIENT_CALCID);

                streamRef.Close();
                Marshal.FreeHGlobal(source);
                fileTag.Close();

                fileTag = clipRef.AddTag("TestTag2");
                fileTag.SetAttribute("filename", fileName);

                // We will only store a fragment of the file - "length" characters from position "offset"
                long offset = 5;
                long length = 30;

                streamRef = new FPWideFilenameStream(fileName, offset, length);
                fileTag.BlobWrite(streamRef, FPMisc.OPTION_CLIENT_CALCID);
                streamRef.Close();

                // And this is how we read back at most "length" characters into a file at position "offset"
                // We can also specify that we don't want the created file to be larger than "maxFileSize"
                long maxFileSize = 20;
                streamRef = new FPWideFilenameStream(fileName + ".partial", FileMode.OpenOrCreate, offset, length, maxFileSize);
                fileTag.BlobRead(streamRef);
                streamRef.Close();

                String clipID = clipRef.Write();

                /* Write the Clip ID to the output file, "inputFileName.clipID" */
                FPLogger.ConsoleMessage("\nThe C-Clip ID of the content is " + clipID);
                FileStream   outFile   = new FileStream(fileName + ".clipID", FileMode.Create);
                BinaryWriter outWriter = new BinaryWriter(outFile);
                outWriter.Write(clipID.ToString() + "\n");

                outWriter.Close();
                outFile.Close();
                fileTag.Close();
                clipRef.Close();
                thePool.Close();
            }
            catch (FPLibraryException e)
            {
                ErrorInfo err = e.errorInfo;
                FPLogger.ConsoleMessage("\nException thrown in FP Library: Error " + err.error + " " + err.message);
            }
        }