मेरे पास गंतव्य स्ट्रिंग स्थान पर फ़ाइल (io.Reader वास्तव में) की प्रतिलिपि बनाने के लिए निम्न कार्य है। हालांकि, ऐसा लगता है कि फ़ाइल का केवल एक हिस्सा वास्तव में एक भ्रष्ट फ़ाइल के परिणामस्वरूप कॉपी किया गया है। मैं क्या गलत कर रहा हूं?आप गो में फ़ाइल कैसे कॉपी करते हैं?
func CopyFile(in io.Reader, dst string) (err error) {
// Does file already exist? Skip
if _, err := os.Stat(dst); err == nil {
return nil
}
err = nil
out, err := os.Create(dst)
if err != nil {
fmt.Println("Error creating file", err)
return
}
defer func() {
cerr := out.Close()
if err == nil {
err = cerr
}
}()
var bytes int64
if bytes, err = io.Copy(out, in); err != nil {
fmt.Println("io.Copy error")
return
}
fmt.Println(bytes)
err = out.Sync()
return
}
मैं filepath.Walk(dir, visit)
विधि के साथ इस का उपयोग कर रहा एक निर्देशिका में फ़ाइलों को प्रोसेस करने।
// Process each matching file on our walk down the filesystem
func visit(path string, f os.FileInfo, err error) error {
if reader, err := os.Open(path); err == nil {
defer reader.Close()
// http://golang.org/pkg/os/#FileInfo
statinfo, err := reader.Stat()
if err != nil {
fmt.Println(err)
return nil
}
fmt.Println()
fmt.Println(statinfo.Size())
// Directory exists and is writable
err = CopyFile(reader, "/tmp/foo/"+f.Name())
if err != nil {
fmt.Println(err)
}
} else {
fmt.Println("Impossible to open the file:", err)
}
}
वर्तमान closest question मैं कर सकता एक स्वीकृत जवाब यह है कि कठिन/नरम लिंक का उपयोग कर की सिफारिश और गर्भपात नहीं करता है तो फ़ाइल पहले से मौजूद है। एक प्रति golang करने के लिए
'io.Copy' लिखित बाइट्स की संख्या देता है। आपको इसका निरीक्षण करना चाहिए, शायद यह मदद करेगा। –
इसके अलावा, आपका कोड मेरे लिए काम करता है। क्या आप दिखा सकते हैं कि आप फ़ंक्शन का उपयोग कैसे करते हैं? –
आप 'इन' में क्या प्रदान कर रहे हैं? क्या आप * किसी भी * त्रुटियों को देख रहे हैं? क्या खराब फ़ाइल पहले से मौजूद है (आप उस मामले में चुपचाप वापस आते हैं)? – JimB