private Stream TryOpenStandardInputStream(SandboxedProcessInfo info, out bool success) { success = true; if (info.StandardInputSourceInfo == null) { return(null); } try { if (info.StandardInputSourceInfo.Data != null) { return(new MemoryStream(CharUtilities.Utf8NoBomNoThrow.GetBytes(info.StandardInputSourceInfo.Data))); } else { Contract.Assert(info.StandardInputSourceInfo.File != null); return(FileUtilities.CreateAsyncFileStream( info.StandardInputSourceInfo.File, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)); } } catch (BuildXLException ex) { m_logger.LogError($"Unable to open standard input stream: {ex.ToString()}"); success = false; return(null); } }
/// <summary> /// Saves a pip cost hash table to a file. /// </summary> /// <exception cref="BuildXLException"> /// Thrown if a recoverable error occurs while operating on the file. /// </exception> public async Task SaveAsync(string fileName) { Contract.Requires(fileName != null); using (FileStream fileStream = FileUtilities.CreateAsyncFileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Delete)) { await SaveAsync(fileStream); } }
/// <summary> /// Opens a pip cost hash table from a file. /// </summary> /// <exception cref="BuildXLException"> /// Thrown if a recoverable error occurs while operating on the file. /// </exception> public static async Task <PipRuntimeTimeTable> LoadAsync(string fileName) { Contract.Requires(fileName != null); using ( FileStream fileStream = FileUtilities.CreateAsyncFileStream( fileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete)) { return(await LoadAsync(fileStream)); } }
/// <inheritdoc /> public virtual async Task <CopyFileResult> CopyToAsync(OperationContext context, ContentLocation sourceLocation, Stream destinationStream, CopyOptions options) { var sourcePath = new AbsolutePath(sourceLocation.Machine.Path) / FileSystemContentStoreInternal.GetPrimaryRelativePath(sourceLocation.Hash, includeSharedFolder: false); if (!FileUtilities.Exists(sourcePath.Path)) { return(new CopyFileResult(CopyResultCode.FileNotFoundError, $"Source file {sourcePath} doesn't exist.")); } long startPosition = destinationStream.Position; using (Stream s = FileUtilities.CreateAsyncFileStream(sourcePath.Path, FileMode.Open, FileAccess.Read, FileShare.Read, FileOptions.Asynchronous | FileOptions.SequentialScan)) { return(await s.CopyToAsync(destinationStream, 81920, context.Token).ContinueWith(_ => CopyFileResult.SuccessWithSize(destinationStream.Position - startPosition))); } }
/// <inheritdoc /> public async Task <CopyFileResult> CopyToAsync(AbsolutePath sourcePath, Stream destinationStream, long expectedContentSize, CancellationToken cancellationToken) { // NOTE: Assumes source is local Contract.Assert(sourcePath.IsLocal); if (!FileUtilities.Exists(sourcePath.Path)) { return(new CopyFileResult(CopyFileResult.ResultCode.SourcePathError, $"Source file {sourcePath} doesn't exist.")); } long startPosition = destinationStream.Position; using (Stream s = FileUtilities.CreateAsyncFileStream(sourcePath.Path, FileMode.Open, FileAccess.Read, FileShare.Read, FileOptions.Asynchronous | FileOptions.SequentialScan)) { return(await s.CopyToAsync(destinationStream, 81920, cancellationToken).ContinueWith(_ => CopyFileResult.SuccessWithSize(destinationStream.Position - startPosition))); } }