68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System.IO; | |||
|  | 
 | |||
|  | namespace ES3Internal | |||
|  | { | |||
|  | 	public enum ES3FileMode {Read, Write, Append} | |||
|  | 
 | |||
|  | 	public class ES3FileStream : FileStream | |||
|  | 	{ | |||
|  | 		private bool isDisposed = false; | |||
|  | 
 | |||
|  | 		public ES3FileStream( string path, ES3FileMode fileMode, int bufferSize, bool useAsync) | |||
|  | 			: base( GetPath(path, fileMode), GetFileMode(fileMode), GetFileAccess(fileMode), FileShare.None, bufferSize, useAsync) | |||
|  | 		{ | |||
|  | 		} | |||
|  | 
 | |||
|  | 		// Gets a temporary path if necessary. | |||
|  | 		protected static string GetPath(string path, ES3FileMode fileMode) | |||
|  | 		{ | |||
|  | 			string directoryPath = ES3IO.GetDirectoryPath(path); | |||
|  |             // Attempt to create the directory incase it does not exist if we are storing data. | |||
|  |             if (fileMode != ES3FileMode.Read && directoryPath != ES3IO.persistentDataPath) | |||
|  | 				ES3IO.CreateDirectory(directoryPath); | |||
|  | 			if(fileMode != ES3FileMode.Write || fileMode == ES3FileMode.Append) | |||
|  | 				return path; | |||
|  | 			return (fileMode == ES3FileMode.Write) ? path + ES3IO.temporaryFileSuffix : path; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected static FileMode GetFileMode(ES3FileMode fileMode) | |||
|  | 		{ | |||
|  | 			if (fileMode == ES3FileMode.Read) | |||
|  | 				return FileMode.Open; | |||
|  | 			else if (fileMode == ES3FileMode.Write) | |||
|  | 				return FileMode.Create; | |||
|  | 			else | |||
|  | 				return FileMode.Append; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected static FileAccess GetFileAccess(ES3FileMode fileMode) | |||
|  | 		{ | |||
|  | 			if (fileMode == ES3FileMode.Read) | |||
|  | 				return FileAccess.Read; | |||
|  | 			else if (fileMode == ES3FileMode.Write) | |||
|  | 				return FileAccess.Write; | |||
|  | 			else | |||
|  | 				return FileAccess.Write; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected override void Dispose (bool disposing) | |||
|  | 		{ | |||
|  | 			// Ensure we only perform disposable once. | |||
|  | 			if(isDisposed) | |||
|  | 				return; | |||
|  | 			isDisposed = true; | |||
|  | 
 | |||
|  | 			base.Dispose(disposing); | |||
|  | 
 | |||
|  | 
 | |||
|  | 			// If this is a file writer, we need to replace the temp file. | |||
|  | 			/*if(fileMode == ES3FileMode.Write && fileMode != ES3FileMode.Append) | |||
|  | 			{ | |||
|  | 				// Delete the old file before overwriting it. | |||
|  | 				ES3IO.DeleteFile(path); | |||
|  | 				// Rename temporary file to new file. | |||
|  | 				ES3IO.MoveFile(path + ES3.temporaryFileSuffix, path); | |||
|  | 			}*/ | |||
|  | 		} | |||
|  | 	} | |||
|  | } |