با این توابع مفید، در استفاده از سیستم فایل تسلط پیدا کنید.
کار با فایل ها و دایرکتوری ها یک کار ضروری برای برنامه هایی است که نیاز به ذخیره و بازیابی داده ها دارند. Go بسته filepath را برای عملیات مسیر فایل مستقل از پلت فرم فراهم می کند. این بسته شامل توابعی برای دستکاری مسیرهای فایل است و با ویندوز، لینوکس و macOS سازگار است.
توابعی که filepath شامل می شود می تواند مسیرهای فایل را بپیوندد، تقسیم کند و پاک کند تا از معتبر بودن آنها اطمینان حاصل شود. این بسته همچنین دارای عملکردهایی برای راه رفتن دایرکتوری ها و جستجوی فایل ها است.
درختان فهرست راه رفتن
تابع Walk بسته filepath عملکردی را برای راه رفتن در درخت دایرکتوری و پیمایش در میان فایلها و دایرکتوریها به صورت پیشسفارش فراهم میکند. به صورت بازگشتی از همه دایرکتوری های زیر ریشه داده شده بازدید می کند. تابع Walk یک دایرکتوری ریشه و تابعی را می گیرد که مسیر، نمونه اطلاعات فایل و نمونه خطا را می گیرد.
package main
import (
"fmt"
"path/filepath"
"os"
)
func main() {
// Defines the root directory to start the walk
root := "."
// Uses the Walk function to walk the directory tree
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// Prints the name of each file or directory
fmt.Println(path)
return nil
})
// Checks for errors
if err != nil {
fmt.Printf("Error walking directory tree: %v\n", err)
}
}
این برنامه دایرکتوری ریشه را به عنوان دایرکتوری فعلی تعریف می کند. تابع اصلی از میان دایرکتوری های دایرکتوری ریشه عبور می کند و نام فایل ها را چاپ می کند.
تطبیق فایل ها با تطبیق الگو
می توانید از تابع Match برای تطبیق نام فایل ها با یک الگو استفاده کنید. نحو الگو بر اساس نحو رایج فایل عام است که از متاکاراکترهایی استفاده می کند که در محیط های یونیکس به عنوان الگوهای glob شناخته می شوند.
package main
import (
"fmt"
"path/filepath"
)
func main() {
// Defines the pattern to match
pattern := "*.txt"
// Uses the Match function to match the pattern on files
match, err := filepath.Match(pattern, "file.txt")
if err != nil {
fmt.Printf("Error matching pattern: %v\n", err)
return
}
// Prints the result of the match
if match {
fmt.Println("File matches pattern.")
} else {
fmt.Println("File does not match pattern.")
}
}
تابع اصلی یک نام فایل را با الگوی *.txt مطابقت می دهد و بسته به نتیجه عبارت شرطی یک رشته چاپ می کند.
تمیز کردن مسیرها با عملکرد تمیز
تابع Clean یک مسیر فایل را می گیرد و با حذف جداکننده های غیر ضروری و تغییرات دایرکتوری، مانند . بخش های (دایرکتوری فعلی) و .. (دایرکتوری والد).
تمیز کردن مسیرهای فایل مفید است زیرا اگر مسیری حاوی جداکنندههای اضافی یا بخشهای نامعتبر باشد یا مسیرهایی مستقل از دایرکتوری فعلی ایجاد کند، از بروز خطا جلوگیری میکند.
package main
import (
"fmt"
"path/filepath"
)
func main() {
// Creates a path with redundant separators and invalid segments
path := "/foo/bar//baz/.././qux/"
// Cleans the path
cleanPath := filepath.Clean(path)
// Prints the original and cleaned file paths
fmt.Println("Original path:", path)
fmt.Println("Cleaned path:", cleanPath)
}
متغیر path مسیر فایل اولیه است و تابع Clean متغیر path را پاک می کند و مسیر فایل پاک شده را برمی گرداند. تابع main مسیرهای فایل اولیه و تمیز را چاپ می کند.
پیوستن و تقسیم مسیرهای فایل در Go
توابع Join و Split عملکردی را برای اتصال و تقسیم مسیرهای فایل ارائه می دهند.
تابع Join هر تعداد عنصر مسیر را می گیرد. یک رشته مسیر فایل منفرد را برمی گرداند که از الحاق آن عناصر با استفاده از جداکننده مسیر مناسب برای سیستم عامل حاصل می شود. تابع Join برای ساخت مسیرهای فایل مستقل از سیستم فایل زیربنایی مفید است.
package main
import (
"fmt"
"path/filepath"
)
func main() {
// Defines four file paths for the join operation
path1 := "folder1"
path2 := "folder2"
path3 := "subfolder1"
path4 := "example.txt"
// Joins the four file paths together into a single path
joinedPath := filepath.Join(path1, path2, path3, path4)
// Print the unified file path
fmt.Println("Joined Path:", joinedPath)
}
متغیرهای path1، path2 و path3 نام پوشه هستند و متغیر path4 نام فایل است. تابع Join نام متغیرهای مسیر را می گیرد و مسیر فایل پیوست شده را برمی گرداند. تابع main مسیر فایل الحاق شده به کنسول را با بسته fmt چاپ می کند.
تابع Split یک رشته مسیر را می گیرد و دایرکتوری مسیر و اجزای نام فایل را برمی گرداند. تابع Split برای استخراج نام فایل ها یا تعیین دایرکتوری والد یک فایل مفید است.
package main
import (
"fmt"
"path/filepath"
)
func main() {
// Sets the file path for the split operation
filePath := "/home/user/documents/example.txt"
// Use the Split function to split the file path
// into its directory and file components
dir, file := filepath.Split(filePath)
// Print the directory and file components
fmt.Println("Directory:", dir)
fmt.Println("File:", file)
}
متغیر filePath مسیر اصلی فایل است و تابع Split متغیر filePath را می گیرد و فهرست و نام فایل را به صورت رشته برمی گرداند. تابع اصلی نام دایرکتوری و فایل را در کنسول چاپ می کند.
شما می توانید فایل های متنی را با Go دستکاری کنید
در کنار عملکرد سیستم فایل، Go بسته هایی را برای کمک به شما در کار با انواع فایل های مختلف از جمله فایل های متنی ارائه می دهد.
میتوانید از بسته bufio برای عملیات ورودی و خروجی بافر در فایلهای متنی و بسته os برای ایجاد فایلها، در میان سایر عملیاتها استفاده کنید.