2016-03-04 2 views
-3

Я пишу инструмент командной строки, чтобы помочь мне эскизировать мои проекты. Мне нужно иметь возможность добавлять строку текста в файл, но в определенное место. Вот пример:Как написать в определенном месте в файле

У меня есть этот routes.js файл:

router.map({ 
    '/home':{ 
    name: 'home', 
    component: Home 
    }, 
    '/about':{ 
    name: 'about', 
    component: About 
    }, 
    '/quote':{ 
    name: 'quote', 
    component: Quote 
    } 
}) 

Теперь я хочу, чтобы выполнить команду, чтобы создать новый маршрут так my-cli generate route ExampleRoute

И я хотел бы, чтобы это написать маршрут как так:

router.map({ 
    '/home':{ 
    name: 'home', 
    component: Home 
    }, 
    '/about':{ 
    name: 'about', 
    component: About 
    }, 
    '/quote':{ 
    name: 'quote', 
    component: Quote 
    }, 
    '/example-route':{ 
    name: 'example-route', 
    component: ExampleRoute 
    } 
}) 

Добавление к нижней части файла легко, но как я могу писать в определенном месте?

+1

По определению «append» означает запись в конце файла. Что означает «присоединить к определенному месту»? Вы не можете вставлять байты в середину файла, не переписывая его. – JimB

+0

@JimB Извините, я пропустил свой вопрос. Я просто хочу быть в состоянии писать в определенное место в файле. – Rodrigo

+1

Для записи в определенном месте вы сначала ищите это местоположение: ['File.Seek'] (https: //golang.org/pkg/os/#File.Seek) – JimB

ответ

0

Для небольших файлов, подобных этому, лучше всего прочитать файл в памяти, изменить его и снова записать.

Одна из возможностей состоит в том, чтобы прочитать его в список строк, по одному в каждой строке. Затем вставьте добавленные строки в список. Затем выпишите список обратно в файл.

Другая возможность - это проанализировать файл на карте, вставить новые элементы в карту и затем записать содержимое карты в файл в требуемом формате.

В качестве альтернативы, если вы всегда хотите, чтобы вставить новый текст на фиксированное смещение от конца файла, вы можете прочитать в строку и вставить новый текст в конце, например, так:

package main 

import (
    "io/ioutil" 
    "log" 
) 

const textToInsert = `, 
'/example-route':{ 
name: 'example-route', 
component: ExampleRoute 
    } 
}) 
` 

func main() { 
    original, err := ioutil.ReadFile("routes.js") 
    if err != nil { 
     log.Fatal(err) 
    } 

    // replace last 4 characters with textToInsert 
    modified := append(original[0:len(original)-4], []byte(textToInsert)...) 

    err = ioutil.WriteFile("routes.js", modified, 0644) 
    if err != nil { 
     log.Fatal(err) 
    } 
} 
Смежные вопросы