get_extension
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — get_extension
get_extension
定义
get_extension 用来从一个文件路径或文件名中提取扩展名(后缀)。你可以把它想象成"看文件穿的是什么外衣":"player.png" 的扩展名就是 "png","scene.tscn" 的扩展名是 "tscn"。
这个方法在判断文件类型时特别常用,比如你加载一个文件前需要先确认它是图片还是音频。
函数签名
C#
// Godot.StringExtensions 方法
public static string GetExtension(this string instance)GDScript
func get_extension() -> String参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| 无 | — | — | 这是一个无参数方法,直接对字符串本身操作 |
返回值
类型: string / String
返回最后一个 . 后面的部分(不含点号本身)。如果字符串中没有 . 或者 . 后面没有内容,则返回空字符串 ""。
代码示例
基础用法
C#
using Godot;
public partial class GetExtensionExample : Node
{
public override void _Ready()
{
GD.Print("player.png".GetExtension());
// 运行结果: png
GD.Print("scene.tscn".GetExtension());
// 运行结果: tscn
GD.Print("data".GetExtension());
// 运行结果: (空字符串,没有扩展名)
}
}GDScript
extends Node
func _ready():
print("player.png".get_extension())
# 运行结果: png
print("scene.tscn".get_extension())
# 运行结果: tscn
print("data".get_extension())
# 运行结果: (空字符串,没有扩展名)实际场景:根据文件类型分类处理
C#
using Godot;
using System.Collections.Generic;
public partial class FileSorter : Node
{
public override void _Ready()
{
string[] files = {
"res://assets/hero.png",
"res://assets/sword.wav",
"res://assets/level_01.tscn",
"res://assets/config.json",
"res://assets/music.ogg"
};
var imageFiles = new List<string>();
var audioFiles = new List<string>();
foreach (string file in files)
{
string ext = file.GetExtension();
switch (ext)
{
case "png":
case "jpg":
case "svg":
imageFiles.Add(file);
break;
case "wav":
case "ogg":
case "mp3":
audioFiles.Add(file);
break;
}
}
GD.Print($"图片文件: {string.Join(", ", imageFiles)}");
GD.Print($"音频文件: {string.Join(", ", audioFiles)}");
// 运行结果:
// 图片文件: res://assets/hero.png
// 音频文件: res://assets/sword.wav, res://assets/music.ogg
}
}GDScript
extends Node
func _ready():
var files := [
"res://assets/hero.png",
"res://assets/sword.wav",
"res://assets/level_01.tscn",
"res://assets/config.json",
"res://assets/music.ogg"
]
var image_files := []
var audio_files := []
for file in files:
var ext := file.get_extension()
match ext:
"png", "jpg", "svg":
image_files.append(file)
"wav", "ogg", "mp3":
audio_files.append(file)
print("图片文件: " + ", ".join(image_files))
print("音频文件: " + ", ".join(audio_files))
# 运行结果:
# 图片文件: res://assets/hero.png
# 音频文件: res://assets/sword.wav, res://assets/music.ogg进阶用法:多重扩展名与边界情况
C#
using Godot;
public partial class GetExtensionAdvanced : Node
{
public override void _Ready()
{
// 多个点号:只取最后一个点后面的内容
GD.Print("archive.tar.gz".GetExtension());
// 运行结果: gz
// 文件名以点结尾
GD.Print("file.".GetExtension());
// 运行结果: (空字符串,点后面没有内容)
// 隐藏文件
GD.Print(".gitignore".GetExtension());
// 运行结果: gitignore
// 带路径的完整路径
GD.Print("res://models/character.glb".GetExtension());
// 运行结果: glb
}
}GDScript
extends Node
func _ready():
# 多个点号:只取最后一个点后面的内容
print("archive.tar.gz".get_extension())
# 运行结果: gz
# 文件名以点结尾
print("file.".get_extension())
# 运行结果: (空字符串,点后面没有内容)
# 隐藏文件
print(".gitignore".get_extension())
# 运行结果: gitignore
# 带路径的完整路径
print("res://models/character.glb".get_extension())
# 运行结果: glb注意事项
- 只取最后一个扩展名:对于
"archive.tar.gz"这样的文件,get_extension返回"gz"而不是"tar.gz"。 - 不含点号:返回的扩展名不包含前面的
.。如果需要带点号,可以手动拼接:"." + path.GetExtension()。 - 隐藏文件的行为:
.gitignore会被当作扩展名是gitignore,这在某些操作系统语境下可能不符合预期。实际使用时请注意区分。 - 与
get_basename配合:get_extension提取扩展名,get_basename提取去扩展名后的部分。两个方法配合使用可以完整拆解一个文件名。 - C# 替代方案:C# 的
System.IO.Path.GetExtension()也可以实现类似功能,但返回值会包含点号(如".png"),且不识别 Godot 的res://路径。
