CFile - класс для работы с файлами

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

Модератор: BV

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

CFile - класс для работы с файлами

Сообщение hCORe » 14.02.2005 (Пн) 16:56

Класс для работы с файлами - CFile. Для отправки на "Кирпичный завод"...
Версия - самая предварительная.

Позволяет удобно читать данные разных форматов из файла. Возвращает атрибуты. Запись в файл будет реализована немного позже. Потестируйте и скажите, что можно улучшить, т.к. класс сырой:
<удалено. Загрузка - ниже>
Последний раз редактировалось hCORe 15.02.2005 (Вт) 21:28, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.02.2005 (Пн) 16:58

Хорошо бы добавить управление контентом файла - записать данные, считать данные (они есть) и обрезать файл до нужной длины.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.02.2005 (Пн) 17:01

Кроме того, неплохо добавить ряд функций или методов, чтобы работать с именем файла.
Скажем:
fileRoot - привод, на котором размещен файл
filePathFull - полный путь к файлу
filePath() - индексированная проперть из папок, на пути к файлу; с индексом 0 корневая и далее
fileFileName - имя файла
fileFileExt - расширение файла
Lasciate ogni speranza, voi ch'entrate.

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 14.02.2005 (Пн) 19:14

Крутая весЧ!
Гы!
Гу!
Тока нехватает иногда считывать имена всех файлов в папке.
Нет! Я знаю про DIR, lstFiles.List!
Но имхо это гимор!
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.02.2005 (Пн) 20:10

Спасибо :) Завтра выложу обновленную версию. А как там с оптимизацией процедуры I_BytesAsStruct? Я знаю, что можно не делать строку, а оставить байтовый массив. Но тогда CopyMemory выдает random'ные результаты :twisted:
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.02.2005 (Пн) 20:16

И еще. Предположим, я напишу процедуру InputBytes(Pos As Long, n As Long, arr() As Byte) которая принимает позицию файла и количество байт для чтения, а возвращает в заданный массив arr() нужное количество байт. И буду использовать эту функцию в методах I_BytesAsStr, I_BytesAsArr и I_BytesAsStruct вместо использования функции InputByte. Ускорится ли чтение и насколько? Стоит ли игра свеч?

Последнее. Не написать ли расширенную обертку для Private-функции InputToDelim которая читает данные из файла до достижения определенного символа?
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.02.2005 (Пн) 20:18

Про индексацию файлов в папке: я сделаю класс-обертку CDirectoryInfo, если будет время :)
А валить всё нужное в одну кучу как-то некультурно :wink:
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.02.2005 (Пн) 21:31

hCORe писал(а):Спасибо :) Завтра выложу обновленную версию. А как там с оптимизацией процедуры I_BytesAsStruct? Я знаю, что можно не делать строку, а оставить байтовый массив. Но тогда CopyMemory выдает random'ные результаты :twisted:

А где там байтовый массив? Я вижу только байтовую функцию :roll:
Но в любом случае, создать сразу строку нужной длины и заполнять через Mid - будет быстрее, чем наращивать посимвольно.
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.02.2005 (Пн) 22:04

tyomitch писал(а):А где там байтовый массив? Я вижу только байтовую функцию :roll:

Я имел в виду: не писать все в строку, а воспользоваться реаизацией из метода I_BytesAsArr:
Код: Выделить всё
On Error Resume Next
    Dim l As Long
    If ByteCount = 0 Then ByteCount = I_Length - SeekPos
    For l = 0 To ByteCount - 1
        DoEvents
        arr(l) = I_Byte(SeekPos + l)
    Next l

Но тогда CopyMemory выдает рандомные результаты :shock:
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.02.2005 (Пн) 22:10

Я не понимаю :-|
Покажи, какой именно код выдаёт рандомные результаты? Может, ты где-нибудь ByVal пропустил?
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.02.2005 (Пн) 22:25

15.02.2005 (завтра) вечером (в СПб) покажу :)
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.02.2005 (Вт) 21:30

Вот и вечер наступил 8)
Добавил функции для работы с путем в файле. Распознают UNC-пути :) Плюс - улучшенная и ускоренная работа.

Вот новая версия:
<опять порезано>
Последний раз редактировалось hCORe 19.02.2005 (Сб) 20:28, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 15.02.2005 (Вт) 21:33

Добавь процедуру удаления файла, если он защищен от записи.
Что-то типа:
Код: Выделить всё
Public function KillFile (Filename as string, ForceKill as Boolean) as boolean
On Error Resume Next
If ForceKill = True Then SetAttr FileName, vbNormal
Kill Filename
If dir(filename) = "" then Killfile = True
End Function

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 15.02.2005 (Вт) 21:35

Добавь функцию переименования файла.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 19.02.2005 (Сб) 20:29

Почти все сделал. Потестируйте, посмотрите, что еще можно сделать/улучшить. Вот и новая версия:
<Удалено. Качаем ниже :)>
Последний раз редактировалось hCORe 01.04.2005 (Пт) 12:18, всего редактировалось 2 раз(а).
Моду создают модоки, а распространяют модозвоны.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 04.03.2005 (Пт) 11:22

1. On Error Resume Next - не не годится. В таких классах нужна более грамотная обработка ошибок.
2. Нет комментариев к процедурам и функциям. Если ты класс для себя написал, тогда зачем выкдадываеш?
3. Это не класс, а мешанина. Должны быть отделные классы:
- атрибутов файла
- чтения/записи
- создания/копирования/удаления
4. Всё это уже сделано.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 04.03.2005 (Пт) 17:01

2 hCORe

Неплохо...

Вот только On Error Resume Next ты всё же зря использовал, ведь мало ли что :)

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 04.03.2005 (Пт) 17:34

marvan писал(а):1. On Error Resume Next - не не годится. В таких классах нужна более грамотная обработка ошибок.
2. Нет комментариев к процедурам и функциям. Если ты класс для себя написал, тогда зачем выкдадываеш?
3. Это не класс, а мешанина. Должны быть отделные классы:
- атрибутов файла
- чтения/записи
- создания/копирования/удаления
4. Всё это уже сделано.

1. А ты хочешь, чтобы класс инициировал ошибки через Err.Raise по информации от LastDllError? :) Мне, например, в сотню раз удобнее, когда на выходе у меня могут быть только данные или отсутствие оных. А если на выходе ошибка - это менее удобно (для меня.)
2. Будут (честное пионЭрское!)
3. А мне удобнее так. Просто потому что.
4. Угу. Ты про FSO? Так он не на каждом компе работает. А свое, родное душу греет :)
Моду создают модоки, а распространяют модозвоны.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 04.03.2005 (Пт) 18:14

hCORe писал(а):А ты хочешь, чтобы класс инициировал ошибки через Err.Raise по информации от LastDllError?


Ну отчего именно Err.Raise? Лично я имел ввиду что-то вроде необязательной переменной в функции, которая в случае ошибки принимала бы значение False или 0...

Можно сделать ErrArray(5) As Boolean, где в случае разных ошибок делать выше указанное.

P.S.
Небольшая рекомендация.

Лучше пиши все API функции в одну строку:

1. Место сэкономишь
2. Код будет выглядеть профессионально

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 05.03.2005 (Сб) 9:56

hCORe писал(а):1. А ты хочешь, чтобы класс инициировал ошибки через Err.Raise по информации от LastDllError? ...

да, именно так. Потому как класс должен отвечать за свои ошибки, а не тот кто этот класс вызывает.
hCORe писал(а):3. А мне удобнее так. Просто потому что.

ну вот, а мне (и может ещё кому) так не удобнее. Например у тебя есть функции чтения/записи файла. Я бы использовал их, но зачем мне в коде два класса, возвращающие расширение файла?
hCORe писал(а):4. Угу. Ты про FSO?

не, не fso.
Я про классы, всё выше описанное реализующие. Которые успели наплодить программисты за всё время существования VB. Остаётся только выбрать лучший.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 05.03.2005 (Сб) 16:05

marvan писал(а):
hCORe писал(а):1. А ты хочешь, чтобы класс инициировал ошибки через Err.Raise по информации от LastDllError? ...

да, именно так. Потому как класс должен отвечать за свои ошибки, а не тот кто этот класс вызывает.
hCORe писал(а):3. А мне удобнее так. Просто потому что.

ну вот, а мне (и может ещё кому) так не удобнее. Например у тебя есть функции чтения/записи файла. Я бы использовал их, но зачем мне в коде два класса, возвращающие расширение файла?
hCORe писал(а):4. Угу. Ты про FSO?

не, не fso.
Я про классы, всё выше описанное реализующие. Которые успели наплодить программисты за всё время существования VB. Остаётся только выбрать лучший.

1. Предлагаю следующую схему - у класса есть методы E_Attach и E_Detach. Первый "прикрепляет" класс-обработчик ошибок (реализующий интерфейс IFileAccessError), которому и передается информация (все данные, а не только LastDllError) при обнаружении ошибки. Второй "открепляет" обработчик. И если обработчика нету, то класс просто выдает на выход пустую строку, пустой массив байтов, незаполненную структуру...
3. Тебе удобнее так - ты так и делай :) А про "классы, возвращающие расширение файла" я не понял. Там есть методы, работающие с именем текущего файла :D
4. А ты уже выбрал? Посоветуй и мне, буду рад несказАнно.
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Новая версия

Сообщение hCORe » 16.03.2005 (Ср) 21:10

Новая версия класса для работы с файлами!

- устранена ошибка в функции InputToDelim. Теперь она работает правильно - не завершается преждевременно;
- появилась полноценная расширяемая обработка ошибок (см. мой предыдущий пост)!

Вот он, CFile 0.6.0:
<убит. Качаем еще ниже %)>
Последний раз редактировалось hCORe 01.04.2005 (Пт) 12:19, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.03.2005 (Ср) 21:11

Ну и, конечно, появились краткие комментарии в коде классов и модулей :wink:
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 01.04.2005 (Пт) 12:20

Новая версия класса - 0.7.5. Главное отличие от 0.6.0 - корректная работа с длинными именами файлов (более 128 символов пути). Качаем:
Моду создают модоки, а распространяют модозвоны.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 01.04.2005 (Пт) 13:33

2 hЯДРо

Главное, что с комментариями :D

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 01.04.2005 (Пт) 13:52

А еще скоро будут туториалы :D
Моду создают модоки, а распространяют модозвоны.

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 28.08.2006 (Пн) 16:37

Выложите, пожалуйста, сюда последную версию класса. Хочется посмотреть. Или отправьте на почту.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.08.2006 (Вт) 7:31

А в кирпичах, тут http://bbs.vbstreets.ru/viewtopic.php?t=13805 не смотрел?
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

    TopList  
cron