Jelajahi Sumber

add: io.tmpfile

Akeit0 7 bulan lalu
induk
melakukan
ca04ade8ba

+ 6 - 0
src/Lua/IO/ILuaFileSystem.cs

@@ -11,6 +11,7 @@ public interface ILuaFileSystem
     public void Remove(string path);
     public string DirectorySeparator { get; }
     public string GetTempFileName();
+    public ILuaIOStream OpenTempFileStream();
 }
 
 public interface ILuaIOStream : IDisposable
@@ -104,6 +105,11 @@ public sealed class FileSystem : ILuaFileSystem
     {
         return Path.GetTempFileName();
     }
+
+    public ILuaIOStream OpenTempFileStream()
+    {
+        return new LuaIOStreamWrapper(File.Open(Path.GetTempFileName(), FileMode.OpenOrCreate, FileAccess.ReadWrite));
+    }
 }
 
 public sealed class LuaIOStreamWrapper(Stream innerStream) : ILuaIOStream

+ 9 - 0
src/Lua/Standard/IOLibrary.cs

@@ -21,6 +21,7 @@ public sealed class IOLibrary
             new("read", Read),
             new("type", Type),
             new("write", Write),
+            new("tmpfile", TmpFile),
         ];
     }
 
@@ -195,4 +196,12 @@ public sealed class IOLibrary
         var resultCount = await IOHelper.WriteAsync(file, "write", context, cancellationToken);
         return resultCount;
     }
+    
+    public async ValueTask<int> TmpFile(LuaFunctionExecutionContext context, CancellationToken cancellationToken)
+    {
+        var file = context.State.Registry["stdout"].Read<FileHandle>();
+        var resultCount = await IOHelper.WriteAsync(file, "write", context, cancellationToken);
+        return resultCount;
+    }
+    
 }

+ 7 - 0
tests/Lua.Tests/Helpers/NotImplementedExceptionFileSystemBase.cs

@@ -35,5 +35,12 @@ namespace Lua.Tests.Helpers
         {
             throw new NotImplementedException();
         }
+        
+        public virtual ILuaIOStream OpenTempStream ()
+        {
+            throw new NotImplementedException();
+        }
+        
+        
     }
 }