গো-তে একটি ফাইল যুক্ত করুন App


88

সুতরাং আমি এর মতো একটি স্থানীয় ফাইল থেকে পড়তে পারি:

data, error := ioutil.ReadFile(name)

এবং আমি একটি স্থানীয় ফাইল লিখতে পারেন

ioutil.WriteFile(filename, content, permission)

তবে আমি কীভাবে একটি ফাইল সংযুক্ত করতে পারি? পদ্ধতিতে কি বিল্ট ইন আছে?


4
হ্যাঁ, আপনি এটি পেয়েছেন আইউটিল ফাংশনগুলি কেবলমাত্র সুবিধাগুলি যা সাধারণ কাজের যত্ন নেয়। আপনি যদি আরও নিয়ন্ত্রণ চান তবে ওএস প্যাকেজটি দেখুন।
ইভান শ

উত্তর:


148

এই উত্তর Go1 এ কাজ করে:

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
    panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
    panic(err)
}

4
0666 ফাইল মোড কেন নয়? আমি ভেবেছিলাম এটি একটি ভাল ডিফল্ট মান।
দিমিত্রি শুরাল্যাভ

4
@ শ্রীধররত্নকুমার: আরেকটি মন্তব্য দেখুন এবং ম্যান উমাস্ক । 022 এর সাধারণ 0666 & ~022 = 0644 = rw-r--r--
উমাস্কের সাহায্যে

55
OS.O_CREATE ফাইলটি ইতিমধ্যে উপস্থিত না থাকলে এটি অন্তর্ভুক্ত করা ভাল।
বাগগাফ

4
কিছুটা বোকা প্রশ্ন হতে পারে তবে কেন এর দরকার পড়বে os.O_APPENDএবং দুজনেরই os.O_WRONLY? এটি নিশ্চিতভাবে কাজ করে তবে কেন উভয়?
দুসান গ্লিগোরিক

os.O_APPEND এবং os.O_WRONLY os.O_APPEND হ'ল অ্যাডড মোডে এই ক্ষেত্রে আচরণ নিয়ন্ত্রণ করা যাতে কোনও ফাইল পয়েন্টার বজায় রাখার প্রয়োজন হয় না। os.O_WRONLY এই ক্ষেত্রে লিখুন ফাইল মোড, অন্যটি পড়া, লিখতে, বা উভয়ই বর্ণনা করা।
সাইবারিয়ান্স

53

গো ডক্সের একটি নিখুঁত উদাহরণ রয়েছে :

package main

import (
    "log"
    "os"
)

func main() {
    // If the file doesn't exist, create it, or append to the file
    f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        log.Fatal(err)
    }
    if _, err := f.Write([]byte("appended some data\n")); err != nil {
        log.Fatal(err)
    }
    if err := f.Close(); err != nil {
        log.Fatal(err)
    }
}


5

... আমি fmt.Fprintf ব্যবহার করব, কারণ একজন লেখককে গ্রহণ করুন ... এবং একটি সংযোগ বা ফাইলগুলি লেখক হবে এবং স্ট্রিংয়ের উপায়ে লিখতে সহজ হবে ...

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
    panic(err)
}

defer f.Close()
fmt.Fprintf(f, "%s", text)

আমি এই সাহায্য আশা করি!

জাভিয়ের,



0

আসুন বলে ফাইলের বিষয়বস্তু যোগ করতে চান currentফাইলে all, তারপর নিচের কোড কাজ করে যাচ্ছে:

func updateTrx() {
    var err error
    var f *os.File

    // If the file doesn't exist, create it, or append to the file
    if f, err = os.OpenFile("all.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil {
        log.Fatal(err)
    }
    defer func() {
        if err := f.Close(); err != nil {
            log.Fatal("error", err)
        }
    }()

    var current *os.File
    if current, err = os.OpenFile("current.csv", os.O_RDONLY, 0); err != nil {
        log.Fatal("error", err)
    }

    defer func() {
        if err := current.Close(); err != nil {
            log.Fatal("error", err)
        }
    }()

    if fileBytes, err := ioutil.ReadAll(current); err != nil {
        log.Fatal("error", err)
    } else {
        if _, err := f.Write([]byte(fileBytes)); err != nil {
            log.Fatal(err)
        }
    }
}

0
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
    panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
    panic(err)
}

গোলং সাইট এবং সর্বোচ্চ ভোট প্রাপ্ত মন্তব্যের ভিত্তিতে সামান্য পরিবর্তন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.