static void Main(string[] args) { try { FPLogger.ConsoleMessage("\nCluster to connect to [" + defaultCluster + "] :"); String clusterAddress = System.Console.ReadLine(); if ("" == clusterAddress) { clusterAddress = defaultCluster; } FPLogger.ConsoleMessage("\nEnter the CA of the content to be restored: "); String clipID = System.Console.ReadLine(); FPPool thePool = new FPPool(clusterAddress); FPClip clipRef = new FPClip(thePool, clipID, FPMisc.OPEN_ASTREE); FPLogger.ConsoleMessage("\nThe clip retention expires on " + clipRef.RetentionExpiry); // Iterate across the clip metadata foreach (FPAttribute attr in clipRef.Attributes) { FPLogger.ConsoleMessage(attr.ToString() + "\n"); } // Iterate across the Tag (and their Attr) collections foreach (FPTag tg in clipRef.Tags) { FPLogger.ConsoleMessage(tg.ToString() + "\n"); foreach (FPAttribute a in tg.Attributes) { FPLogger.ConsoleMessage(a.ToString() + "\n"); } } FPTag t = (FPTag)clipRef.Tags[0]; if (t.ToString() == "StoreContentObject") { String outfile = clipRef.ClipID + ".Tag." + 0; FPStream streamRef = new FPStream(outfile, "wb"); t.BlobRead(streamRef, FPMisc.OPTION_DEFAULT_OPTIONS); streamRef.Close(); FPLogger.ConsoleMessage("\nThe Blob has been stored into " + outfile); t.Close(); t = (FPTag)clipRef.Tags[1]; //Do the same for the second tag outfile = clipRef.ClipID + ".Tag." + 1; streamRef = new FPStream(outfile, "wb"); t.BlobRead(streamRef, FPMisc.OPTION_DEFAULT_OPTIONS); streamRef.Close(); FPLogger.ConsoleMessage("\nThe Blob has been stored into " + outfile); FPLogger.ConsoleMessage("\nThe CDF has been saved to " + clipRef.ClipID + ".xml"); streamRef = new FPStream(clipRef.ClipID + ".xml", "wb"); clipRef.RawRead(streamRef); // We could retrieve the blob into a buffer - we know we stored // a string in the StoreContent sample so let's get it back.. int blobSize = (int)t.BlobSize; UTF8Encoding converter = new UTF8Encoding(); byte[] buffer = new byte[blobSize]; IntPtr source = Marshal.AllocHGlobal(blobSize); streamRef = new FPStream(source, blobSize, FPStream.StreamDirection.OutputFromCentera); t.BlobRead(streamRef); Marshal.Copy(source, buffer, 0, blobSize); Marshal.FreeHGlobal(source); FPLogger.ConsoleMessage("\n" + converter.GetString(buffer)); streamRef.Close(); } else { FPLogger.ConsoleMessage("\nApplication Error: Not A C-Clip Created By StoreContent Example"); } } catch (FPLibraryException e) { ErrorInfo err = e.errorInfo; FPLogger.ConsoleMessage("\nException thrown in FP Library: Error " + err.error + " " + err.message); } }
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); } }