/// <reference types="node" />
import Tree from "./Tree";
import { EventEmitter } from "events";
import { CreateOptions } from "../protocol/smb2/packets/Create";
import CreateDispositionType from "../protocol/smb2/CreateDispositionType";
import FilePipePrinterAccess from "../protocol/smb2/FilePipePrinterAccess";
import { Readable } from "stream";
import { FileWriteStream } from "./stream/FileWriteStream";
export declare type FileStats = {
    structureSize: number;
    oplockLevel: number;
    flags: number;
    createAction: number;
    creationTime: bigint;
    lastAccessTime: bigint;
    lastWriteTime: bigint;
    changeTime: bigint;
    allocationSize: bigint;
    endOfFile: bigint;
    fileAttributes: number;
    reserved2: number;
    fileId: string;
    createContextsOffset: number;
    createContextsLength: number;
};
interface OpenOptions {
    desiredAccess?: FilePipePrinterAccess;
    createDisposition?: CreateDispositionType;
    createOptions?: CreateOptions;
}
interface File {
    on(event: "open" | "close", callback: (file: File) => void): this;
    once(event: "open" | "close", callback: (file: File) => void): this;
}
declare class File extends EventEmitter {
    private tree;
    _id: Buffer;
    isOpen: boolean;
    fileSize: bigint;
    private _stats;
    constructor(tree: Tree);
    open(path: string, options?: OpenOptions): Promise<void>;
    get stats(): Readonly<FileStats>;
    create(path: string): Promise<void>;
    remove(): Promise<void>;
    rename(newPath: string): Promise<void>;
    setSize(size: bigint): Promise<void>;
    setInfo(fileInfoClass: number, buffer: Buffer): Promise<void>;
    private writeChunk;
    write(content: Buffer | string): Promise<void>;
    createWriteStream(): FileWriteStream;
    private readChunk;
    read(): Promise<Buffer>;
    createReadStream(options?: {
        start?: number;
        end?: number;
    }): Readable;
    exists(path: string): Promise<boolean>;
    close(): Promise<void>;
}
export default File;
