Skip to content

Commit

Permalink
add: work with file in go section
Browse files Browse the repository at this point in the history
  • Loading branch information
Ja7ad committed May 17, 2023
1 parent 78919a3 commit 026ce37
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ app/worker/node_modules
node_modules/
latestcheck.json
app/desktop/book/
.obsidian/
112 changes: 111 additions & 1 deletion content/chapter 4/4.7-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,114 @@ slug: work-with-file-in-go
weight: 7007
---

آموزش کار با فایل...
## 4.7.1 مقدمه

توسعه دهندگان Go می‌توانند از پکیج‌های built-in مانند "os" و "io" برای کار با فایل‌ها استفاده کنند. همچنین، پکیج‌های دیگری نیز برای کار با فایل وجود دارند که می‌توان به عنوان پکیج استاندارد نامید. نمونه ای از این پکیج‌ها، پکیج "bufio" است که برای کار با بفرهای ورودی/خروجی استفاده شده و به توسعه دهندگان اجازه می‌دهد تا برنامه‌هایی با عملکرد بهتر و با کارایی بالاتر ایجاد کنند.

## 4.7.2 باز کردن فایل و خواندن محتوای فایل با پکیج os

برای باز کردن یک فایل متنی و خواندن محتوای آن، می‌توانیم از پکیج "os" و تابع "Open" استفاده کنیم. در کد زیر، ما یک فایل به نام "example.txt" باز می‌کنیم و محتوای آن را بر اساس خط به خط خوانده و به صفحه کنسول چاپ می‌کنیم:

```go
package main

import (
"bufio"
"fmt"
"log"
"os"
)

func main() {
// باز کردن فایل برای خواندن
file, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()

// خواندن خط به خط از فایل
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}

if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
```

در کد بالا، با استفاده از تابع "os.Open"، فایل "example.txt" برای خواندن به صورت فایل شیء باز می‌شود. سپس، با استفاده از تابع "bufio.NewScanner" محتوای فایل به شیء "scanner" انتقال داده می‌شود و در نهایت با استفاده از حلقه، محتوای فایل خوانده شده بر اساس خط به خط و به صورت متنی چاپ می‌شود.

در نهایت، با استفاده از "scanner.Err"، خطاهایی که در پروسه خواندن ممکن است بوجود آیند، بررسی شده و مورد احتیاط قرار می‌گیرند.

## 4.7.3 نحوه ایجاد فایل و نوشتن محتوا داخل فایل با os

برای ایجاد یک فایل جدید و نوشتن محتوای دلخواه در آن، می‌توانیم از پکیج "os" و توابع آن استفاده کنیم. در کد زیر، یک فایل با نام "example.txt" ساخته شده و پس از باز شدن، متن "Hello, World!" در داخل آن نوشته می‌شود:

```go
package main

import (
"fmt"
"os"
)

func main() {
// ساخت فایل با نام example.txt
file, err := os.Create("example.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()

// نوشتن محتوا در فایل
fmt.Fprintln(file, "Hello, World!")
}
```

در کد بالا، با استفاده از تابع "os.Create"، یک فایل با نام "example.txt" ایجاد شده و به عنوان یک فایل شیء باز شده است. سپس با استفاده از تابع "fmt.Fprintln"، متن "Hello, World!" در داخل فایل نوشته می‌شود.

در نهایت، با استفاده از "file.Close"، فایل بسته شده و تمام تغییرات آن ذخیره می‌شود.

## 4.7.4 خواندن و نوشتن فایل با استفاده از پکیج io

برای خواندن و نوشتن فایل‌ها می‌توان از پکیج "io" استفاده کرد. این پکیج امکانات بسیاری را برای کار با بیت‌ها و داده‌های ورودی/خروجی فراهم می‌کند. در کد زیر، یک فایل با نام "example.txt" باز شده و محتوای آن به صورت خوانده و به فایل دیگری با نام "output.txt" کپی می‌شود:

```go
package main

import (
"io"
"log"
"os"
)

func main() {
// باز کردن فایل برای خواندن
inputFile, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()

// باز کردن فایل برای نوشتن
outputFile, err := os.Create("output.txt")
if err != nil {
log.Fatal(err)
}
defer outputFile.Close()

// کپی کردن اطلاعات از فایل ورودی به فایل خروجی
_, err = io.Copy(outputFile, inputFile)
if err != nil {
log.Fatal(err)
}
}
```

در کد بالا، با استفاده از توابع "os.Open" و "os.Create"، فایل‌های ورودی و خروجی باز شده و به عنوان فایل شیء به برنامه اضافه شده‌اند. سپس با استفاده از تابع "io.Copy"، اطلاعات از فایل ورودی، به فایل خروجی کپی شده‌اند.

در نهایت، با استفاده از "defer" و "Close"، فایل‌ها بسته شده‌اند و تغییرات آن‌ها ذخیره شده‌اند.

0 comments on commit 026ce37

Please sign in to comment.