powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Прочитать файл построчно
17 сообщений из 17, страница 1 из 1
Прочитать файл построчно
    #39082831
kotekote
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно защитить некоторое количество файлов на диске. Процесс этот долгий и не факт что всё это дело отработает до перезагрузки, поэтому был разработан план действий:

- пробежаться по диску при помощи FindFirstFile/FindNextFile и загнать все файлы включая пути в текстовый файл. На выходе получаю что-то вроде:
Код: plaintext
1.
2.
3.
C:\1.txt
C:\2.txt
C:\3.txt


- записать в реестр информацию о количестве файлов, необходимых для шифрования
- взять первую строку из файла, передать ее процедуре шифрования и записать в реестр [кол-во зашифрованных файлов+1]
- взять вторую строку
- и т.д.

При следующем запуске мне хотелось бы считать из реестра количество успешно зашифрованных файлов и исходя из этого взять из текстового файла нужную мне строку. Дело в том, что в С++ нет функции:
Код: plaintext
1.
char* str = readline( file, 10 )



есть только getline, которая мне не очень подходит. Есть идея создать вектор из объектов типа string, и перенести все содержимое файла при помощи getline, но что делать если текстовый файл в размере > 100 мегабайт? Может в C/C++ есть что-то вроде readline(hfile, npos)?
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082841
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kotekoteно что делать если текстовый файл в размере > 100 мегабайт?
Подавать заявку в книгу рекордов Гиннесса в раздел "человек, собравший у себя на винте
самую большую файлопомойку в мире".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082843
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем шифровать все файлы на диске С ?

Нельзя прочитать строку Х текстового файла, не прочитав все предыдущие строки, т.к. строки переменной длины.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082845
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗачем шифровать все файлы на диске С ?
Чтобы потом вымогать деньги с их владельца.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082848
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TЗачем шифровать все файлы на диске С ?
Чтобы потом вымогать деньги с их владельца.

Судя по вопросам данный код будет убит 99% антивирусов. :)
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082856
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kotekoteМне нужно защитить некоторое количество файлов на диске. Процесс этот долгий и не факт что всё это дело отработает до перезагрузки, поэтому был разработан план действий:

- пробежаться по диску при помощи FindFirstFile/FindNextFile и загнать все файлы включая пути в текстовый файл. На выходе получаю что-то вроде:
Код: plaintext
1.
2.
3.
C:\1.txt
C:\2.txt
C:\3.txt


- записать в реестр информацию о количестве файлов, необходимых для шифрования
- взять первую строку из файла, передать ее процедуре шифрования и записать в реестр [кол-во зашифрованных файлов+1]
- взять вторую строку
- и т.д.

При следующем запуске мне хотелось бы считать из реестра количество успешно зашифрованных файлов и исходя из этого взять из текстового файла нужную мне строку. Дело в том, что в С++ нет функции:
Код: plaintext
1.
char* str = readline( file, 10 )



есть только getline, которая мне не очень подходит. Есть идея создать вектор из объектов типа string, и перенести все содержимое файла при помощи getline, но что делать если текстовый файл в размере > 100 мегабайт? Может в C/C++ есть что-то вроде readline(hfile, npos)?



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

но кажется тебе тут вовсе и не нужен произвольной доступ .
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082862
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kotekoteно что делать если текстовый файл в размере > 100 мегабайт?
ну например , хранить в реестре не только количество обработанных файлов, но и позицию в многострадальном текстовом файле
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082908
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно просто переименовывать файлы сначала 1.txt => 1.txt.processing
а потом в 1.txt.encrypted.

И реестр тут вобщем-то не нужен.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082974
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При 100Мб Вы будете иметь около 10^8 символов, пусть каждая строка имеет в среднем 20 символов, вы будете иметь около 5*10^6 символов. У вас существует счётчик в котором указано сколько строк вы обработали. За линейное время, вы должны за обозримое время перебрать необходимое количество строк/символов по признаку конца строки
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39082985
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kotekote... Есть идея создать вектор из объектов типа string, и перенести все содержимое файла при помощи getline, но что делать если текстовый файл в размере > 100 мегабайт?
100 Мб цифра небольшая. Примерно за секунду все произойдет. Если файл значительно больше - лучше задействовать что-то из СУБД или NoSql

PS Ты бы лучше описал реальную задачу. Вполне возможно есть другое решение.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083211
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строки можно фиксированной длинны делать. Путь вроде не может быть длиннее 256 символов. Вот и пиши строками по 256 символов. Где путь короче, добавляй пробелы в хвост строки. В файле получится обычный массив.

Но прочитать файл 100МБ не так много времени надо. Наконец, сохраняй не номер строки, а смещение файле и используй seek для позиционирования.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи криптографии обычно оперируют блоками байт. Тот факт что автор скатился на API
со строками говорит о том что он заблуждается либо делает совсем другое.

Что другое - вот в чём вопрос.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083342
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabПуть вроде не может быть длиннее 256 символов. Вот и пиши строками по 256
символов.
Ага, видел я такие программы, которые закладываются на это ошибочное предположение.
Забавные спецэффекты с ними происходят, когда напускаешь их на путь типа "C:\Documents and
Settings\Вася Пупкин\Мои документы\Моя музыка\Попса\Отстойная\Группа с длинным
названием\Очень забавное название альбома, придуманное дебилами\А вот тут мы уложим в
названии песни всё её содержание без остатка.mp3".

256 символов это ограничение на одно только имя файла. Путь к нему - уже 2048. А при
использовании юникодной нотации (которую придумали специально чтобы обойти упомянутые
спецэффекты в функциях WinAPI) можно полное имя файла растянуть на 32к.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083382
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Код: plaintext
1.
Путь бесконечен, 
потому что никто не может тебя остановить.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083547
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, ограничения в 256/255 байтов я часто встречал в документах из серии RFC-**
В части файловой системы - полностью согласен что это боян, но возможно стоит еще
каждый кейс рассмотреть отдельно на предмет того куда этот path сохраняется
и откуда растут ноги. Толи от compatibility со старым API (MAX_PATH) толи от ограниченности
ячейки в БД. Толи еще от бох весть каких протоколов.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083556
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmcureenabПуть вроде не может быть длиннее 256 символов. Вот и пиши строками по 256
символов.
Ага, видел я такие программы, которые закладываются на это ошибочное предположение.
Это не предположение, а документированное ограничение:

https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365247(v=vs.85).aspx]Maximum Path Length Limitation
In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters .
...
The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters .
Но "32,767 characters" вряд ли угрожает автору, пока он работает только с локальными дисками.
...
Рейтинг: 0 / 0
Прочитать файл построчно
    #39083868
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabНо "32,767 characters" вряд ли угрожает автору, пока он работает только с локальными дисками.
почему?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Прочитать файл построчно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]