singlepost

Сохранение текста в программе C# << На главную или назад  

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

16 ответов в теме “Сохранение текста в программе C#”

  1. 15
    Андрей Васнецов ответил:

    блин, товаришь хочет хочет чтоб прога содержала в себе свой же код
    Так это НЕВОЗМОЖНО
    точно также как и файл не может содержать собственный хеш, только еще невозможнее

  2. 14
    Константин Дёмин ответил:

    #14, даст, но это 98ая винда, насколько я помню. :-) .NET с ней вроде бы даже дружен (Win98 SE).

    Но зачем такая головная боль, если есть [де]сериализация? :)

    PS: автор сам не знает, что ему нужно. Думаю, нужно учить мат.часть.

  3. 13
    Евгений Паньков ответил:

    Создай внешнюю сборку .NET, в ней – класс со статическим string полем. Потом программно (System.Reflection) открывай ее, правь поле, сохраняй, создавай класс из нее в рантайме и используй. Только опять же – отдельный файл. А модифицировать собственный экзешник программы на ходу тебе винда не даст.

  4. 12
    Евгений Баталов ответил:

    Написал бы зачем, а тебе бы тогда посоветовали стоит это делать для твоей задачи или нет. Можно по идее статическое поле у класса создать в дллке и править ее. Для этого используется рефлексия. Но это все равно доп файл. Обычные строки легко можно просмотреть (не зашифрованные) дизассемблером (если дело в безопасности). Я бы в реестре сохранил зашифрованные данные (если секрет), а если не секрет то просто сохранил бы в реестре без шифрования. Ключ для расшифровки я обычно высчтываю в цикле-так его сложнее выдрать дизассемблером, если еще обфускацию пройдет сборка.

  5. 11
    Илья Антипенко ответил:

    не, ну чё… конфигураторы пинча и пр…

  6. 10
    Михаил Demidov ответил:

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

  7. 9
    Дмитрий Гайдамович ответил:

    Ну например можно с образом dll поиграться. В dll вынести часть логики. И, не выполняя LoadLibrary() править эту dll. Но это как-то всё по-хакерски, и зачем – неясно. Проблема в том, что обычно программы не модифицируют свои образы на диске.

  8. 8
    Роман Белоус ответил:

    "Если нельзя сохранить без создания ОТДЕЛЬНОГО ФАЙЛА тогда так и напишите."
    Проблема в том, что в принципе возможно практически всё что угодно. Вопрос только в количестве затрачиваемых усилий и прочих подобных факторах.

    "Если вы знаете как это сделать пишите подробно или не пишите вообще."
    Дело в том, что подавляющее большинство задач программирования – уникальны в той или иной степени. Поэтому на конкретный вопрос, как правило, _точно_ ответить никто не может, особенно, если он нечётко сформулирован. Кроме тебя самого – когда ты его сам найдёшь ответ. А примерный ответы других для тебя – источник идей. Кроме того, важно какую цель ты преследуешь. Если отдельный файл – самоцель (например, просто из интереса хочешь именно так сделать), то это одно. Если ты хочешь таким образом поддержать какую-то функцию (например, чтобы текст никто посторонний не мог прочесть) – то это совсем другое дело. Во второй ситуации всегда есть несколько способов решения задачи с разными плюсами и минусами.

    Что касается именно отдельного файла, то, имхо, на С# ты этого достичь не сможешь (без фантастических усилий). Самомодифицирующиеся программы вообще не в почёте. Но на динамических интерпретируемых языках (Python, REBOL, Lisp etc) – без проблем, просто модифицируешь аккуратно файл с исходным кодом прямо из программы и всё. А Smalltalk вообще не хранит исходый код в текстовом виде и умеет поддерживать состояние программы между запусками, так что в нём твоя задача тоже решается относительно просто.

  9. 7
    Димка Прокофьев ответил:

    Ясно "СПАСИБО"

  10. 6
    Vlad Ламбар ответил:

    отвечаю: то что тебе надо – автоматическая сериализация при завершении работы и десериализация при старте…но это с файлом

    в саму программу ты не сохранишь данные…кажется в С++ ты хаками сможешь изменять внутренности "стринг тейбл" тогда не будет тебе файлов…но это бред, так никто не делает…

  11. 5
    Димка Прокофьев ответил:

    Интересно я тоже таким стану, ничего странного тут я не вижу. Да возможно я не знаю как конкретно задать вопрос. Ребят если вам так нравитсяотвечать на вопросы зачем на них вообще отвечать. Если нельзя сохранить без создания ОТДЕЛЬНОГО ФАЙЛА тогда так и напишите. Если вы знаете как это сделать пишите подробно или не пишите вообще. Если вопрос не понятен я попробую поставить вопрос по другому.
    Очень грубо говоря
    ВОТ ПРОГРАММА < она же папка
    \/
    > это код программы
    \/
    > это форма программы
    \/
    > это файл куда сохраняется текст

    Как так сделать чтобы файл был в программе если такое возможно БЕЗ ОТДЕЛЬНОГО ФАЙЛА

  12. 4
    Евгений Баталов ответил:

    Толи вопрос не понятно поставлен, толи как… Или люди, которые занимаются программированием уже не знают, что не сохранять невозможно. И зачем нужна ОП и зачем нужен хард… Без обид.

  13. 3
    Vlad Ламбар ответил:

    это наз. "сериализация"

  14. 2
    Алексей Поздняков ответил:

    "то есть я например, редактирую в поле текст СОХРАНЯЮ закрываю приложение…"
    Сохраняешь ты его в любом случае куда-то. (файл, база данных и т.д) а при открытии автоматически читаешь.

  15. 1
    Роман Белоус ответил:

    Какие странные у людей запросы. Зачем это нужно? В любом случае что-то сохранять да придётся – сгенерённый класс, например, храняший твои данные. Наверняка, для C# существует библиотека, позволяющая генерить классы в рантайме или MSIL код.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.