Я хочу заменить некоторые данные в файле, однако я не знаю точно, где этот 200MB-файл будет содержать его. Можно ли найти (и заменить их чем-то еще) этими значениями без загрузки в память файла 200mb +?Найти и заменить данные в файле (без загрузки всего объекта)?
ответ
Поиск файла не представляет проблемы. Вам нужно работать с FileStream, доступным с помощью метода File.Open. Вы можете прочитать файл до байтов, которые нужно заменить. Проблема возникает, когда вам нужно что-то вставить. FileStream позволяет вам перезаписать некоторые или все содержимое файла с определенного байта вперед и добавить новый контент в его конец, но он не позволяет вставлять данные в середине файла. Чтобы преодолеть эту проблему, вам понадобится временный файл. Если вы согласны с этим, можете сделать следующее:
- Открыть FileStream в исходном файле.
- Создайте временный файл, который будет содержать черновик.
- Поиск по исходному файлу и копирование всех «хороших» данных во временный файл до момента, когда необходимо внести изменения.
- Вставьте измененные и новые данные во временный файл.
- Завершите временный файл оставшимся «хорошим» контентом из исходного файла.
- Замените исходный файл на временный.
- Удалить временный файл.
Вы можете использовать метод Path.GetTempFileName для удобства использования временного файла.
P.S. Если вы изменяете exe, вы, вероятно, делаете замену текстовых констант, и вам не нужно вставлять новые байты или удалять какие-либо. В таком случае вам не нужно беспокоиться о временном файле, и FileStream - это все, что вам нужно.
P.P.S. Работая с FileStream, вы определяете размер буфера, который вы читаете из файла, и записываете обратно. Имейте в виду, что этот размер является компромиссом между потреблением памяти, производительностью ввода-вывода и сложностью вашего кода. Выбирай с умом. Я бы сделал это за каждый байт в первый раз и попытался оптимизировать увеличение буфера, чтобы сказать 64k, когда он работает. Вы можете рассчитывать на FileStream для буферизации данных; он не выполняет операции ввода/вывода с диска каждый раз, когда вы запрашиваете у него другой байт. Если вы погрузитесь в буферизацию самостоятельно, попробуйте не фрагментировать Large Object Heap. Порог для .NET 4.5 составляет 85000 байт.
Alykins, вы ошибаетесь. Файлы - это просто хранилище двоичных данных.Неважно, что такое содержимое, и не имеет значения, какое расширение имени файла вы можете свободно работать с содержимым файла. –
Cool-Я никогда не знал, что вы можете изменить исполняемый файл с помощью этого метода доступа. Я пытался найти документацию так или иначе, но я буду доверять, потому что ваш ответ кажется на вопрос. – alykins
Просто подумайте, как насчет чтения файла по строкам или может быть в куске байтов и видеть в каждом фрагменте, если у вас есть данные, которые необходимо заменить. Кроме того, во время чтения убедитесь, что указатель файла до тех пор, пока вы не прочитали файл, так что, когда u найдет совпадение, вы можете вернуться в это место и записать эти точные байты, на которые вы нацелились.
Возможно, это сработает. Exe, скорее всего, сломается, но открытие кусков - вариант, который я думаю ... – Pixelspace
- 1. Загрузка значения атрибута без загрузки всего объекта
- 2. найти в файле и заменить
- 3. найти и заменить в файле
- 4. как заменить слово в текстовом файле без перезаписи всего файла
- 5. Phyloxml: найти и заменить в файле
- 6. Найти и заменить текст в .docx файле без открытия файла
- 7. Найти и заменить слова/строки в файле
- 8. , внося изменения в сайт asp.net без повторной загрузки всего объекта
- 9. сценарий оболочки найти и заменить в файле
- 10. Найти и заменить слово в текстовом файле
- 11. Python найти и заменить в текстовом файле
- 12. Найти и заменить строку в текстовом файле
- 13. Найти следующее слово и заменить в файле
- 14. Найти и заменить элементы в файле Json
- 15. найти и заменить в файле xml
- 16. найти и заменить значение в файле конфигурации
- 17. Найти и заменить в большом файле
- 18. найти и заменить int в xml-файле
- 19. Найти и заменить в текстовом файле
- 20. Найти и заменить переменные SED в файле
- 21. Найти и заменить в файле C
- 22. SQL - найти и заменить данные
- 23. Найти и заменить без цикла
- 24. Заменить данные в файле PDF
- 25. Как можно изменить приложение GWT без повторного загрузки всего объекта?
- 26. Найти и заменить без regexp в dired
- 27. найти и заменить данные в нескольких записях
- 28. Как найти и заменить несколько строк в текстовом файле?
- 29. Perl - Найти, форматировать и заменить строки в файле
- 30. Найти и заменить объект внутри объекта
Какой файл? – alykins
@alykins Файл будет, к сожалению, являться .exe. То, что я пытаюсь сделать, - это процесс «исправления». – Pixelspace
Вы на 100% уверены, что exe? Как exe будет хранить данные? – alykins