Exemplo n.º 1
0
        public bool EndPutFileChunk(string fileID)
        {
            string tmpFileName   = Path.Combine(serverSettings.TempFolder, fileID);
            string tmpMarkerName = tmpFileName + "._marker_";

            //IF THE TEMP FILE EXISTS THEN BEGIN THE REAL PUTFILE WHICH STORES IT ACROSS ALL THE SERVERS AND WRITES THE INFORMATION TO THE DATABASE
            if (!File.Exists(tmpFileName) || !File.Exists(tmpMarkerName))
            {
                throw new FileNotFoundException("Invalid FileID Specified");
            }
            else
            {
                try
                {
                    TempFileMarker tmpDiskMarker = File.ReadAllText(tmpMarkerName).Deserialize <TempFileMarker>();

                    //CALL THE ORIGINAL PUT FILE AND RETURN ITS RESULT
                    return(DistributeFile(tmpDiskMarker.Folder, tmpDiskMarker.FileName, tmpDiskMarker.ReplicateCount, tmpFileName, tmpDiskMarker.OverWrite, tmpDiskMarker.ExtraInfo));
                }
                catch (Exception e)
                {
                    //LOG ANY EXCEPTION WHICH OCCURED DURING THE ATTEMPTED MOVE
                    Logging.WriteEntry(e.Message, e, new StackTrace());
                }
                finally
                {
                    //ATTEMPT TO DELETE THE TEMP FILE
                    try
                    {
                        File.Delete(tmpFileName);
                    }
                    catch (Exception e)
                    {
                        Logging.WriteEntry(e.Message, e, new StackTrace());
                    }

                    //ATTEMPT TO DELETE THE MARKER FILE
                    try
                    {
                        File.Delete(tmpMarkerName);
                    }
                    catch (Exception e)
                    {
                        Logging.WriteEntry(e.Message, e, new StackTrace());
                    }
                }
            }

            //IF WE HAVE MADE IT THIS FAR THEN THERE WAS AN ERROR SO RETURN FALSE;
            return(false);
        }
Exemplo n.º 2
0
        public string BeginPutFileChunk(string folder, string fileName, int replicateCount, bool overWrite, ExtraInfo[] extraInfo)
        {
            string         fileID        = Guid.NewGuid().ToString();
            string         tmpFileName   = Path.Combine(serverSettings.TempFolder, fileID);
            string         tmpMarkerName = tmpFileName + "._marker_";
            TempFileMarker tmpMarker     = new TempFileMarker()
            {
                Folder = folder, FileName = fileName, ReplicateCount = replicateCount, OverWrite = overWrite, ExtraInfo = extraInfo
            };

            try
            {
                //CREATE THE TEMPORARY FILE ID WHICH WILL HOLD THE DATA UNTIL THE ENDPUTFILE IS CALLED
                File.Create(tmpFileName).Close();

                //WRITE THE MARKER FILE TO DISK SO WE CAN PULL ITS INFORMATION LATER
                File.WriteAllBytes(tmpMarkerName, System.Text.ASCIIEncoding.ASCII.GetBytes(tmpMarker.Serialize()));

                //RETURN THE FILEID SO WE CONTINUE TO APPEND TO THE CORRECT FILE
                return(fileID);
            }
            catch (Exception e)
            {
                //IF ANYTHING HAPPENS ATTEMPT TO DELETE THE FILE AND ITS MARKER SINCE IT WILL NOT BE NEEDED
                try
                {
                    File.Delete(tmpFileName);
                    File.Delete(tmpMarkerName);
                }
                catch
                {
                }

                //LOG THE ERROR TO THE DATABASE FOR LATER
                Logging.WriteEntry(e.Message, e, new StackTrace());
            }

            //IF WE HAVE MADE IT THIS FAR THEN THERE WAS AN ERROR SO RETURN NULL
            return(null);
        }