107 lines
3.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|