Skip to content

Commit ca5f35b

Browse files
committed
v2 fix EvilBeaver#1409: работа ЧтенияДанных из ДвоичныхДанных большого размера
1 parent 7a3239d commit ca5f35b

File tree

2 files changed

+11
-13
lines changed

2 files changed

+11
-13
lines changed

src/OneScript.StandardLibrary/Binary/BackingTemporaryFile.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ This Source Code Form is subject to the terms of the
88
using System;
99
using System.IO;
1010
using Microsoft.Win32.SafeHandles;
11-
using ScriptEngine;
1211

1312
namespace OneScript.StandardLibrary.Binary
1413
{
@@ -57,7 +56,7 @@ public void Dispose()
5756

5857
public Stream OpenReadStream()
5958
{
60-
return new FileStream(_backingFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
59+
return new FileStream(_backingFilePath, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
6160
}
6261

6362
private void Init(Stream source)

src/OneScript.StandardLibrary/Binary/DataReader.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,24 +70,23 @@ private DataReader(Stream stream, IValue textEncoding, ByteOrderEnum? byteOrder,
7070
[ScriptConstructor(Name = "На основании двоичных данных или имени файла")]
7171
public static DataReader Constructor(IValue dataSource, IValue textEncoding = null, ByteOrderEnum? byteOrder = null, string lineSplitter = "\n", string convertibleSplitterOfLines = null)
7272
{
73+
Stream stream;
7374
if (dataSource.SystemType == BasicTypes.String)
7475
{
75-
var stream = new FileStream(dataSource.AsString(), FileMode.Open, FileAccess.Read, FileShare.Read);
76-
return new DataReader(stream, textEncoding, byteOrder, lineSplitter, convertibleSplitterOfLines);
76+
stream = new FileStream(dataSource.AsString(), FileMode.Open, FileAccess.Read, FileShare.Read);
7777
}
7878
else
7979
{
80-
var obj = dataSource.AsObject();
81-
Stream stream;
82-
if (obj is BinaryDataContext)
83-
stream = ((BinaryDataContext)obj).GetStream();
84-
else if (obj is IStreamWrapper)
85-
stream = ((IStreamWrapper) obj).GetUnderlyingStream();
86-
else
87-
throw RuntimeException.InvalidArgumentType("dataSource");
80+
stream = dataSource.AsObject() switch
81+
{
82+
BinaryDataContext binaryData => binaryData.GetStream(),
83+
IStreamWrapper wrapper => wrapper.GetUnderlyingStream(),
8884

89-
return new DataReader(stream, textEncoding, byteOrder, lineSplitter, convertibleSplitterOfLines);
85+
_ => throw RuntimeException.InvalidArgumentType("dataSource")
86+
};
9087
}
88+
89+
return new DataReader(stream, textEncoding, byteOrder, lineSplitter, convertibleSplitterOfLines);
9190
}
9291

9392
/// <summary>

0 commit comments

Comments
 (0)