Browse Source

[iOS] Truncate file in IOSStorageFile.OpenWrite (#20807)

* [iOS] Truncate file in IOSStorageFile.OpenWrite

* Stop accessing scoped resources on exception
pull/20817/head
Julien Lebosquain 3 weeks ago
committed by GitHub
parent
commit
b8457014dd
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 22
      src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs

22
src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs

@ -174,25 +174,35 @@ internal sealed class IOSStorageFile : IOSStorageItem, IStorageBookmarkFile
public Task<Stream> OpenReadAsync()
{
return Task.FromResult(CreateStream(FileAccess.Read));
return Task.FromResult(CreateStream(FileMode.Open, FileAccess.Read));
}
public Task<Stream> OpenWriteAsync()
{
return Task.FromResult(CreateStream(FileAccess.Write));
return Task.FromResult(CreateStream(FileMode.Create, FileAccess.Write));
}
private Stream CreateStream(FileAccess fileAccess)
private Stream CreateStream(FileMode fileMode, FileAccess fileAccess)
{
var document = new UIDocument(Url);
using var document = new UIDocument(Url);
var path = document.FileUrl.Path!;
var scopeCreated = SecurityScopedAncestorUrl.StartAccessingSecurityScopedResource();
var stream = File.Open(path, FileMode.Open, fileAccess);
FileStream stream;
try
{
stream = new FileStream(path, fileMode, fileAccess);
}
catch
{
if (scopeCreated)
SecurityScopedAncestorUrl.StopAccessingSecurityScopedResource();
throw;
}
return scopeCreated ?
new SecurityScopedStream(stream, Disposable.Create(() =>
{
document.Dispose();
SecurityScopedAncestorUrl.StopAccessingSecurityScopedResource();
})) :
stream;

Loading…
Cancel
Save