---
title: "fopen | open.mp"
description: "打开文件（用于读取或写入）。"
canonical: https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fopen
language: zh-CN
---

# fopen

## 描述

打开文件以便进行读写操作。

| 参数 | 说明 |
| --- | --- |
| const filename\[\] | 文件路径（若仅指定文件名，则默认在'scriptfiles'文件夹中查找） |
| [filemode:mode](https://omp.itsneufox.com/zh-CN/docs/scripting/resources/file-modes) | 文件打开模式（默认值：io\_readwrite） |

## 返回值

-   成功时返回有效的文件句柄（File:handle 类型）
-   失败时返回 0

## 示例

**io\_read 模式（只读）：**

```c
// 以"只读"模式打开"file.txt"
new File:handle = fopen("file.txt", io_read);

// 声明缓冲区
new buf[128];

// 检查文件是否成功打开
if (handle)
{
    // 成功

    // 逐行读取文件内容
    while (fread(handle, buf))
    {
        print(buf); // 输出每行内容
    }

    // 关闭文件
    fclose(handle);
}
else
{
    // 错误提示
    print("文件 \"file.txt\" 不存在或无法打开。");
}
```

  

**io\_write 模式（只写）：**

```c
// 以"只写"模式打开"file.txt"
new File:handle = fopen("file.txt", io_write);

if (handle)
{
    // 写入内容
    fwrite(handle, "这是新写入的内容！");

    fclose(handle); // 关闭文件
}
else
{
    print("无法打开文件 \"file.txt\"");
}
```

  

**io\_readwrite 模式（读写）：**

```c
// 以"读写"模式打开"file.txt"
new File:handle = fopen("file.txt", io_readwrite);
new buf[128];

if (handle)
{
    // 读取现有内容
    while (fread(handle, buf))
    {
        print(buf);
    }

    // 重置文件指针到起始位置
    fseek(handle, _, seek_begin);

    // 覆盖写入新内容
    fwrite(handle, "覆盖原始内容");

    fclose(handle);
}
else
{
    print("文件操作失败");
}
```

  

**io\_append 模式（追加）：**

```c
// 以"追加"模式打开日志文件
new File:handle = fopen("server.log", io_append);

if (handle)
{
    // 追加日志条目
    fwrite(handle, "[LOG] 服务器启动成功\r\n");

    fclose(handle);
}
else
{
    print("日志文件写入失败");
}
```

## 注意事项

注意

-   在 `io_read` 模式下打开不存在的文件将返回空句柄
-   使用无效句柄执行文件操作会导致服务器崩溃
-   文件操作完成后务必使用 [fclose](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fclose) 关闭文件

## 相关函数

-   [fclose](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fclose): 关闭文件
-   [ftemp](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/ftemp): 创建临时文件流
-   [fremove](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fremove): 删除文件
-   [fwrite](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fwrite): 写入文件内容
-   [fread](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fread): 读取文件内容
-   [fputchar](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fputchar): 写入单个字符
-   [fgetchar](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fgetchar): 读取单个字符
-   [fblockwrite](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fblockwrite): 批量写入数据块
-   [fblockread](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fblockread): 批量读取数据块
-   [fseek](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fseek): 调整文件指针位置
-   [flength](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/flength): 获取文件大小
-   [fexist](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fexist): 检查文件是否存在
-   [fmatch](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fmatch): 文件名模式匹配
-   [ftell](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/ftell): 获取当前文件指针位置
-   [fflush](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fflush): 强制写入磁盘缓存
-   [fstat](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fstat): 获取文件元数据
-   [frename](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/frename): 文件重命名
-   [fcopy](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fcopy): 文件复制
-   [filecrc](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/filecrc): 计算文件 CRC 校验码
-   [fattrib](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fattrib): 设置文件属性
-   [fcreatedir](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/fcreatedir): 创建目录

## 相关资源

-   [文件模式详解](https://omp.itsneufox.com/zh-CN/docs/scripting/resources/file-modes)
