Страница: 1 |
Вопрос: Как укоротить файл? | Добавлено: 02.03.10 00:59 |
Автор вопроса: ![]() |
Подскажите, пож, как не создавая дополнительных временных файлов, удалить из открытого файла заданный плзициями фрагмент, в частности, концовку. |
Ответы | Всего ответов: 8 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 02.03.10 01:24 |
http://msdn.microsoft.com/en-us/library/aa365531(VS.85).aspx |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 7 |
Профиль | Цитата | #2 | Добавлено: 02.03.10 01:55 |
А нет ли чего подобного в VB? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 02.03.10 17:07 |
неа, если имеются в виду стандартные функции VB6. Поэтому без WinAPI далеко не убежишь |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 7 |
Профиль | Цитата | #4 | Добавлено: 03.03.10 15:09 |
Спасибо Winand'у за консультацию. По причине моей некомпетентности в программировании
сочинил модуль ReWriteRazdF (ниже), выполняющий функцию замены фрагмента в закрытом файле с использованием Temp-файла. Аргументы '- полное имя исходного файла; '- полное имя вспомогательного файла; '- начальный разделитель; '- конечный разделитель; '- номер фрагмента; '- строка - новый фрагмент Разделители в новом файле остаются. Если Nach$= ””, то начинает с начала файла. Если не находит Kon$, то удаляет фрагмент до конца файла и заменяет его новым. Использует модули: FindStrOpenF(Nom, Nach$, nBlok) – вычисляет число сдвигов позиций до начала разделителя (если не находит, то -1). Переводит текущую позицию на следующую после разделителя. Читает файл блоками длины nBlok. DelF – уничтожитель файла. Проверил в разных случаях - работает. Function ReWriteRazdF(IdFile$, DopFile$, Nach$, Kon$, nomRazd, Sstr$) lnNach = Len(Nach$) lnKon = Len(Kon$) m1 = 1 iind = False nBlok = 1 'длина считываемых блоков Nom = FreeFile Open IdFile$ For Binary As #Nom i = 0 nBlok = 1 Do While Not EOF(1) And i < nomRazd n1 = FindStrOpenF(Nom, Nach$, nBlok) i = i + 1 If n1 > 0.5 Then m1 = m1 + n1 + lnNach Seek #Nom, m1 If i >= nomRazd Then iind = True End If Loop If iind Then n2 = FindStrOpenF(Nom, Kon$, nBlok) Seek #Nom, 1 Nom1 = FreeFile Open DopFile$ For Binary As #Nom1 For i = 1 To m1 - 1 z$ = Input(1, #Nom) Put #Nom1, , z$ Next Put #Nom1, , Sstr$ If n2 >= 0 Then m2 = m1 + n2 Seek #Nom, m2 Do While Not EOF(Nom) z$ = Input(1, #Nom) Put #Nom1, , z$ Loop End If Close #Nom Close #Nom1 DelF (IdFile$) Name DopFile$ As IdFile$ s = 1 Else Close #Nom s = 0 End If ReWriteRazdF = s End Function |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #5 | Добавлено: 03.03.10 22:22 |
Вычитать нужный фрагмент и сохранить под темже именем не судьба?
Извиняюсь если я неправильно понял, но помоему задачка для первого урока программирования. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 04.03.10 01:23 |
|
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #7 | Добавлено: 04.03.10 01:54 |
Неслабый такой примерчик ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 7 |
Профиль | Цитата | #8 | Добавлено: 04.03.10 12:14 |
Спасибо, Winand. Этого мне надолго хватит для развития и совершенствования в этом
направлении. Без знания техники программирования для решения отдельных возникающих задач приходится копать лопатой вместо использования этой замечательной техники. |
Страница: 1 |
|