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); }
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); }