SWP/List/FileSystemApi/File.cs
2017-03-09 21:08:25 +00:00

107 lines
3.0 KiB
C#

using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
namespace FileSystemApi
{
public class File
{
private IntPtr m_hFile;
private FileAccess m_fileAccess;
private long m_length;
internal File()
{
}
internal int Read(byte[] buffer, int offset, int count)
{
int bytesRead = 0;
int ret = FileSystem.ReadFile(Handle, buffer, count, offset, out bytesRead);
return bytesRead;
}
internal long Seek(long offset, SeekOrigin origin)
{
MoveMethod method;
switch (origin)
{
case SeekOrigin.Begin:
method = MoveMethod.Begin;
break;
case SeekOrigin.Current:
method = MoveMethod.Current;
break;
case SeekOrigin.End:
method = MoveMethod.End;
break;
default:
throw new ArgumentOutOfRangeException("origin");
}
return FileSystem.SeekFile(Handle, (int)offset, method);
}
internal void Close()
{
FileSystem.CloseFile(m_hFile);
}
internal FileAccess FileAccess
{
get { return m_fileAccess; }
private set { m_fileAccess = value; }
}
internal long Length
{
get { return m_length; }
private set { m_length = value; }
}
internal long Position
{
get
{
return FileSystem.SeekFile(Handle, 0, MoveMethod.Current);
}
}
internal IntPtr Handle
{
get { return m_hFile; }
private set { m_hFile = value; }
}
public static FileStream Open(string lpFilename,
FileAccess dwDesiredAccess,
FileShare dwShareMode,
CreationDisposition dwCreationDisposition)
{
var dwFlagsAndAttributes = FileAttributes.Normal;
var file = new File();
file.FileAccess = dwDesiredAccess;
int ret = FileSystem.OpenFile(lpFilename,
dwDesiredAccess,
dwShareMode,
dwCreationDisposition,
dwFlagsAndAttributes,
out file.m_hFile);
if(file.Handle == IntPtr.Zero)
throw new Exception("Could not open file");
file.m_length = FileSystem.GetFileSize(file.Handle);
return new FileStream(file);
}
}
}