Skip to content

Commit 8124b1c

Browse files
Add RootStorage.OpenWrite and tests
1 parent 03ce131 commit 8124b1c

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

OpenMcdf.Ole.Tests/OlePropertiesExtensionsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void ModifyDocumentSummaryInformation()
101101
public void ReadSummaryInformationUtf8()
102102
{
103103
// Regression test for #33
104-
using var cf = RootStorage.Open("wstr_presets.doc", FileMode.Open);
104+
using var cf = RootStorage.OpenRead("wstr_presets.doc");
105105
using CfbStream stream = cf.OpenStream(PropertySetNames.SummaryInformation);
106106
OlePropertiesContainer co = new(stream);
107107

OpenMcdf.Tests/RootStorageTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
[TestClass]
44
public sealed class RootStorageTests
55
{
6+
[TestMethod]
7+
[DoNotParallelize] // Test sharing
8+
[DataRow("MultipleStorage.cfs")]
9+
public void Open(string fileName)
10+
{
11+
using var rootStorage = RootStorage.OpenRead(fileName);
12+
using var rootStorage2 = RootStorage.OpenRead(fileName);
13+
14+
Assert.ThrowsException<IOException>(() => RootStorage.Open(fileName, FileMode.Open));
15+
Assert.ThrowsException<IOException>(() => RootStorage.OpenWrite(fileName));
16+
}
17+
618
[TestMethod]
719
[DataRow(Version.V3, 0)]
820
[DataRow(Version.V3, 1)]

OpenMcdf/RootStorage.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,17 @@ public static RootStorage Open(string fileName, FileMode mode, StorageModeFlags
7070
return Open(stream, flags);
7171
}
7272

73+
public static RootStorage Open(Stream stream, StorageModeFlags flags = StorageModeFlags.None)
74+
{
75+
stream.ThrowIfNotSeekable();
76+
stream.Position = 0;
77+
78+
IOContextFlags contextFlags = ToIOContextFlags(flags);
79+
RootContextSite rootContextSite = new();
80+
_ = new RootContext(rootContextSite, stream, Version.Unknown, contextFlags);
81+
return new RootStorage(rootContextSite, flags);
82+
}
83+
7384
public static RootStorage OpenRead(string fileName, StorageModeFlags flags = StorageModeFlags.None)
7485
{
7586
ThrowIfLeaveOpen(flags);
@@ -78,15 +89,12 @@ public static RootStorage OpenRead(string fileName, StorageModeFlags flags = Sto
7889
return Open(stream, flags);
7990
}
8091

81-
public static RootStorage Open(Stream stream, StorageModeFlags flags = StorageModeFlags.None)
92+
public static RootStorage OpenWrite(string fileName, StorageModeFlags flags = StorageModeFlags.None)
8293
{
83-
stream.ThrowIfNotSeekable();
84-
stream.Position = 0;
94+
ThrowIfLeaveOpen(flags);
8595

86-
IOContextFlags contextFlags = ToIOContextFlags(flags);
87-
RootContextSite rootContextSite = new();
88-
_ = new RootContext(rootContextSite, stream, Version.Unknown, contextFlags);
89-
return new RootStorage(rootContextSite, flags);
96+
FileStream stream = File.OpenWrite(fileName);
97+
return Open(stream, flags);
9098
}
9199

92100
RootStorage(RootContextSite rootContextSite, StorageModeFlags storageModeFlags)

StructuredStorageExplorer/MainForm.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private void LoadFile(string fileName)
142142
cf = null;
143143

144144
// Load file
145-
cf = RootStorage.Open(fileName, FileMode.Open);
145+
cf = RootStorage.OpenWrite(fileName);
146146

147147
fileNameLabel.Text = fileName;
148148
saveAsToolStripMenuItem.Enabled = true;

0 commit comments

Comments
 (0)