Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
7b022cbd
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7b022cbd
编写于
10月 30, 2019
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
files - prefer non-stream read/write if signaled by caller
上级
f3806078
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
26 addition
and
11 deletion
+26
-11
src/vs/platform/files/common/fileService.ts
src/vs/platform/files/common/fileService.ts
+26
-11
未找到文件。
src/vs/platform/files/common/fileService.ts
浏览文件 @
7b022cbd
...
...
@@ -17,6 +17,7 @@ import { VSBuffer, VSBufferReadable, readableToBuffer, bufferToReadable, streamT
import
{
Queue
}
from
'
vs/base/common/async
'
;
import
{
CancellationTokenSource
,
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
assign
}
from
'
vs/base/common/objects
'
;
export
class
FileService
extends
Disposable
implements
IFileService
{
...
...
@@ -300,14 +301,14 @@ export class FileService extends Disposable implements IFileService {
await
this
.
mkdirp
(
provider
,
dirname
(
resource
));
}
// write file:
buffered
if
(
hasOpenReadWriteCloseCapability
(
provid
er
))
{
await
this
.
doWrite
Buffered
(
provider
,
resource
,
bufferOrReadableOrStream
instanceof
VSBuffer
?
bufferToReadable
(
bufferOrReadableOrStream
)
:
bufferOrReadableOrStream
);
// write file:
unbuffered (only if data to write is a buffer, or the provider has no buffered write capability)
if
(
!
hasOpenReadWriteCloseCapability
(
provider
)
||
(
hasReadWriteCapability
(
provider
)
&&
bufferOrReadableOrStream
instanceof
VSBuff
er
))
{
await
this
.
doWrite
Unbuffered
(
provider
,
resource
,
bufferOrReadableOrStream
);
}
// write file:
un
buffered
// write file: buffered
else
{
await
this
.
doWrite
Unbuffered
(
provider
,
resource
,
bufferOrReadableOrStream
);
await
this
.
doWrite
Buffered
(
provider
,
resource
,
bufferOrReadableOrStream
instanceof
VSBuffer
?
bufferToReadable
(
bufferOrReadableOrStream
)
:
bufferOrReadableOrStream
);
}
}
catch
(
error
)
{
throw
new
FileOperationError
(
localize
(
'
err.write
'
,
"
Unable to write file ({0})
"
,
this
.
ensureError
(
error
).
toString
()),
toFileOperationResult
(
error
),
options
);
...
...
@@ -353,7 +354,16 @@ export class FileService extends Disposable implements IFileService {
}
async
readFile
(
resource
:
URI
,
options
?:
IReadFileOptions
):
Promise
<
IFileContent
>
{
const
stream
=
await
this
.
readFileStream
(
resource
,
options
);
const
provider
=
await
this
.
withReadWriteProvider
(
resource
);
const
stream
=
await
this
.
doReadAsFileStream
(
provider
,
resource
,
assign
({
// optimization: since we know that the caller does not
// care about buffering, we indicate this to the reader.
// this reduces all the overhead the buffered reading
// has (open, read, close) if the provider supports
// unbuffered reading.
preferUnbuffered
:
true
},
options
||
Object
.
create
(
null
)));
return
{
...
stream
,
...
...
@@ -364,6 +374,11 @@ export class FileService extends Disposable implements IFileService {
async
readFileStream
(
resource
:
URI
,
options
?:
IReadFileOptions
):
Promise
<
IFileStreamContent
>
{
const
provider
=
await
this
.
withReadWriteProvider
(
resource
);
return
this
.
doReadAsFileStream
(
provider
,
resource
,
options
);
}
private
async
doReadAsFileStream
(
provider
:
IFileSystemProviderWithFileReadWriteCapability
|
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
options
?:
IReadFileOptions
&
{
preferUnbuffered
?:
boolean
}):
Promise
<
IFileStreamContent
>
{
// install a cancellation token that gets cancelled
// when any error occurs. this allows us to resolve
// the content of the file while resolving metadata
...
...
@@ -389,14 +404,14 @@ export class FileService extends Disposable implements IFileService {
let
fileStreamPromise
:
Promise
<
VSBufferReadableStream
>
;
// read
buffered
if
(
hasOpenReadWriteCloseCapability
(
provider
))
{
fileStreamPromise
=
Promise
.
resolve
(
this
.
readFileBuffered
(
provider
,
resource
,
cancellableSource
.
token
,
options
)
);
// read
unbuffered (only if either preferred, or the provider has no buffered read capability)
if
(
!
hasOpenReadWriteCloseCapability
(
provider
)
||
(
hasReadWriteCapability
(
provider
)
&&
options
?.
preferUnbuffered
))
{
fileStreamPromise
=
this
.
readFileUnbuffered
(
provider
,
resource
,
options
);
}
// read
un
buffered
// read buffered
else
{
fileStreamPromise
=
this
.
readFileUnbuffered
(
provider
,
resource
,
options
);
fileStreamPromise
=
Promise
.
resolve
(
this
.
readFileBuffered
(
provider
,
resource
,
cancellableSource
.
token
,
options
)
);
}
const
[
fileStat
,
fileStream
]
=
await
Promise
.
all
([
statPromise
,
fileStreamPromise
]);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录