Search code examples
c#wcfimaging

WCF Image Service is Locking Files


I'm doing a c# wcf service in which I receive a bunch of images and the service merge them in a multiimage Tiff file. At the end of the service I want to delete the original files but I'm receiving an error that some other process is locking the file.

This is the code that receives the images (as a byte[] list) and write them to disk

public static List<string> SaveByteImagesToFile(List<byte[]> bytesToCopyIntoFiles, string imageReferenceType, string imageReferenceValue)
        {
            _applicationLogger.Debug(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name);

            string imageFinalPath = string.Empty;
            string joinImagesFilePath = string.Empty;

            List<string> imagesFilePath = new List<string>();

            int count = 1;

            try
            {
                if (bytesToCopyIntoFiles.Count == 0)
                {
                    throw new ArgumentNullException("bytesToCopyIntoFiles");
                }
                else
                {
                    joinImagesFilePath = SettingsManager.GetServiceSetting(AppSettingsKeys.CopyImagesToFilePath, "NO_VALID_FILEPATH");

                    if (joinImagesFilePath.IsValidFilePath(out string errorMessage, true, true))
                    {

                        foreach (byte[] image in bytesToCopyIntoFiles)
                        {
                            var imageFileName = imageReferenceType + "_" + imageReferenceValue + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + count.ToString();
                            imageFinalPath = joinImagesFilePath + Path.DirectorySeparatorChar + imageFileName + ".tiff";

                            using (FileStream stream = new FileStream(imageFinalPath, FileMode.Create, FileAccess.ReadWrite))
                            {
                                stream.Write(image, 0, image.Length);
                                stream.Flush();
                            }

                            imagesFilePath.Add(imageFinalPath);
                            count++;
                        }
                    }
                    else
                    {
                        exceptionMessageType = MainRepository.GetExceptionMessage("E171");
                        throw new IOException(exceptionMessageType.ExceptionMessage + " " + errorMessage);
                    }
                }
                return imagesFilePath;
            }
            catch
            {
                throw;
            }
        }  

How or what can I use to prevent the service or any process to lock the file. As you can see I'm using the using scope for filestream without any luck.

Any ideas? Thanks


Solution

  • Resolved! By organizing the files in a certain order, when creating the multipage tiff, by the time the logic ends the worker already unlock the resources and I'm able now to delete them without any issue.