Как вставить символы в файл с помощью C#

Если вы работаете в искровой оболочке, вам не следует создавать экземпляр HiveContext, который создается автоматически с именем sqlContext (имя вводит в заблуждение - если вы скомпилировали Spark с Hive, это будет HiveContext). См. Аналогичное обсуждение здесь .

Если вы не работаете в оболочке - это исключение означает, что вы создали более одного HiveContext в одной JVM, что кажется невозможным - вы можете создать только один.

13
задан Gulzar Nazim 14 January 2009 в 02:12
поделиться

7 ответов

Файловые системы не поддерживают "вставку" данных посреди файла. Если у Вас действительно есть потребность в файле, который может быть записан в в отсортированном способе, я предлагаю, чтобы Вы изучили использование встроенной базы данных.

Вы могли бы хотеть смотреть на SQLite или BerkeleyDB.

С другой стороны, Вы могли бы работать с текстовым файлом или двоичным файлом прежней версии. В этом случае Ваша единственная опция состоит в том, чтобы переписать файл, по крайней мере, от точки вставки до конца.

я посмотрел бы класс FileStream , чтобы сделать случайный ввод-вывод в C#.

10
ответ дан 1 December 2019 в 23:33
поделиться

Необходимо будет, вероятно, переписать файл от точки, Вы вставляете изменения до конца. Вы могли бы лучше всего всегда писать до конца файла и использовать инструменты, такие как вид и grep для вывода данных в желаемом порядке. Я предполагаю, что Вы говорите о текстовом файле здесь, не двоичном файле.

3
ответ дан 1 December 2019 в 23:33
поделиться

Нет никакого способа вставить символы в в файл, не переписывая их. С C# это может быть сделано с любыми Потоковыми классами. Если бы файлы огромны, я рекомендовал бы Вам использовать Ядро GNU Utils в коде C#. Они являются самыми быстрыми. Я раньше обрабатывал файлы очень крупного текста с ядром utils (размеров 4 ГБ, 8 ГБ или больше и т.д.). Команды как голова, хвост, разделение, csplit, кошка, shuf, клочок, uniq действительно помогает много в текстовом управлении.

, Например, если необходимо поместить некоторые символы в файл на 2 ГБ, можно использовать разделение-b BYTECOUNT, вставить ouptut в файл, добавить новый текст к нему, и получить остальную часть содержания и добавить к нему. Это должно, предположительно, быть быстрее, чем какой-либо другой путь.

Hope это работает. Дайте ему попытку.

2
ответ дан 1 December 2019 в 23:33
поделиться

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

1
ответ дан 1 December 2019 в 23:33
поделиться

Если Вы знаете определенное местоположение, в которое Вы хотите записать новые данные, использовать класс BinaryWriter:

using (BinaryWriter bw = new BinaryWriter (File.Open (strFile, FileMode.Open)))
{
    string strNewData = "this is some new data";
    byte[] byteNewData = new byte[strNewData.Length];

    // copy contents of string to byte array
    for (var i = 0; i < strNewData.Length; i++)
    {
        byteNewData[i] = Convert.ToByte (strNewData[i]);
    }

    // write new data to file
    bw.Seek (15, SeekOrigin.Begin);  // seek to position 15
    bw.Write (byteNewData, 0, byteNewData.Length);
}
1
ответ дан 1 December 2019 в 23:33
поделиться

В зависимости от объема Вашего проекта можно хотеть решить вставить каждую строку текста с файлом в таблица datastructure. Вид подобных таблица базы данных , тот путь можно вставить в определенное местоположение в любой данный момент и не иметь, чтобы читать - в, изменить и произвести весь текстовый файл каждый раз. Это - то, учитывая тот факт, что Ваши данные "огромны", как Вы выразились. Вы все еще воссоздали бы файл, но по крайней мере Вы создаете масштабируемое решение этим способом.

0
ответ дан 1 December 2019 в 23:33
поделиться

Может быть "возможно" в зависимости от того, как файловая система хранит файлы для быстрой вставки (т.е., добавьте дополнительный), байты в середине. Если удаленно возможно, что может только быть выполнимо сделать так полный блок за один раз, и только или выполнением низкоуровневой модификации самой файловой системы или при помощи файловой системы определенный интерфейс.

Файловые системы обычно не разрабатываются для этой операции. Если необходимо быстро сделать, вводит Вас, действительно нуждаются в более общей базе данных.

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

0
ответ дан 1 December 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: