Skip to content

Commit 8a2911a

Browse files
authored
Create file if nonexistent with open mode 'ab+' (#1710)
1 parent d8b570a commit 8a2911a

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

Src/IronPython/Modules/_fileio.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,9 @@ public FileIO(CodeContext/*!*/ context, string name, string mode = "r", bool clo
130130
_readStream = _writeStream = OpenFile(context, pal, name, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite);
131131
break;
132132
case "ab+":
133-
_readStream = OpenFile(context, pal, name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
133+
// Opening _writeStream before _readStream will create the file if it does not exist
134134
_writeStream = OpenFile(context, pal, name, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
135+
_readStream = OpenFile(context, pal, name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
135136
_readStream.Seek(0L, SeekOrigin.End);
136137
_writeStream.Seek(0L, SeekOrigin.End);
137138
break;

Tests/test_file.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,4 +769,10 @@ def test_opener_uncallable(self):
769769

770770
self.assertRaises(TypeError, open, "", "r", opener=uncallable_opener)
771771

772+
def test_open_abplus(self):
773+
with open(self.temp_file, "ab+") as f:
774+
f.write(b"abc")
775+
f.seek(0)
776+
self.assertEqual(f.read(), b"abc")
777+
772778
run_test(__name__)

0 commit comments

Comments
 (0)