powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / порезка непролезающих в почту файлов
2 сообщений из 2, страница 1 из 1
порезка непролезающих в почту файлов
    #32903454
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на суд публики выкладываю набор процедур
для порезки непролезающих в почту файлов
(у кого нет RAR - знают, о чем речь)

маленькое пояснение:
контроль CRC ессно не реализован, поэтому лучше всего резать ZIP - он при распаковке проверит целостность

код работает под EXCEL,
но можно и Word, и Access, и VB задействовать,
поскольку специфики нет, все стандартно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
Const myExt = "slc" 'расширение у файлов
Const SlicePart =  1048576  *  2  'размер куска

'Декларируем:
Public Type OpenFilename
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
(ByRef pOpenfilename As OpenFilename) As Boolean

Declare Function CommDlgExtendedError Lib "comdlg32.dll" () As Long

'Аргументы: sTitle - строка которую выводим в заголовке формы открытия файла
'Назначение: Вывод диалогового окна открытия файла
'Возвращает: Строку - путь к выбранному файлу
Public Function GetFile(Optional sFlt As String = "", Optional sTitle As String = "Открыть файл") As String
Dim of As OpenFilename
Dim pos As Integer

GetFile = ""
of.lStructSize = Len(of)
'of.hwndOwner = Application.hWndExcelApp
If sFlt = "" Then sFlt = "ZIP Files (*.zip)" & Chr$( 0 ) & "*.zip"
of.lpstrFilter = sFlt ' "ZIP Files (*.zip)" & Chr$(0) & "*.zip" & Chr$(0) & "All Files (*.*)" & Chr$(0) & "*.*"
of.nFilterIndex =  1 
of.lpstrFile = String$( 512 ,  0 )
of.nMaxFile =  511 
of.lpstrDefExt = "mdb"
of.lpstrTitle = sTitle

If GetOpenFileName(of) Then
pos = InStr( 1 , of.lpstrFile, Chr$( 0 ))
GetFile = Left(of.lpstrFile, pos -  1 )
End If
End Function

Sub Slice()
Dim sFileIn, sFileOut, lngFileLen, LastSliceLen, j, MaxJ
Dim VarString As String
Dim a, b, c
On Error GoTo err_slice

sFileIn = GetFile()
If sFileIn = "" Then Exit Sub

DivideFileName sFileIn, a, b, c
sFileOut = ActiveWorkbook.Path & "\" & b & "."

On Error Resume Next
Kill sFileOut & "*"
On Error GoTo err_slice

VarString = String(SlicePart, " ")
Open sFileIn For Binary Access Read As  1 
lngFileLen = LOF( 1 )
MaxJ = lngFileLen \ SlicePart
LastSliceLen = lngFileLen Mod SlicePart

For j =  1  To MaxJ
Open sFileOut & CalcExt(j) For Binary Access Write As  2 
Get # 1 , , VarString
Put # 2 , , VarString
Close  2 
Next
'last part
If LastSliceLen >  0  Then
VarString = String(LastSliceLen, " ")
Open sFileOut & CalcExt(MaxJ +  1 ) For Binary Access Write As  2 
Get # 1 , , VarString
Put # 2 , , VarString
Close  2 
End If

ext_slice:
Close  2 
Close  1 
Exit Sub

err_slice:

MsgBox "ERROR: " & Err.Number & Err.Description & vbCrLf & "Terminating execution.", vbCritical, "ERROR!"

Resume ext_slice
End Sub

Function CalcExt(PartNo)
'выдать расширение
If PartNo =  1  Then
CalcExt = myExt
Else
CalcExt = Left(myExt,  1 ) + Format(PartNo -  1 , "00")
End If
End Function

Sub UnSlice()
Dim sFileIn, curFileIn, sFileOut, lngFileLen, LastSliceLen, j, MaxJ
Dim VarString As String
Dim a, b, c
On Error GoTo err_slice

sFileIn = GetFile("SLICED Files (*.slc)" & Chr$( 0 ) & "*.slc")
If sFileIn = "" Then Exit Sub

DivideFileName sFileIn, a, b, c
sFileIn = a & b & "."
sFileOut = ActiveWorkbook.Path & "\" & b & ".zip"

'Kill sFileOut & "*"

Open sFileOut For Binary Access Write As  2 

Do
    j = j +  1 
    curFileIn = sFileIn & CalcExt(j)
    If Dir(curFileIn) <> "" Then 'это еще не конец
        Open curFileIn For Binary Access Read As  1 
        
        lngFileLen = LOF( 1 )
        VarString = String(lngFileLen, " ")
        
        Get # 1 , , VarString
        Put # 2 , , VarString
        Close  1 
        Debug.Print curFileIn & " OK"
    Else
        Exit Do
    End If

Loop

ext_slice:
Close  2 
Close  1 
Exit Sub

err_slice:
MsgBox "ERROR: " & Err.Number & Err.Description & vbCrLf & "Terminating execution.", vbCritical, "ERROR!"
Resume ext_slice
End Sub

Sub DivideFileName(sIn, sDir, sFile, sExt)

Dim tmp, j

'получить путь со слэшем
tmp = sIn
For j = Len(tmp) To  3  Step - 1 
If Mid(tmp, j,  1 ) = "\" Then Exit For
Next

sDir = Left(tmp, j)

'получить расширение, на входе имя файла
tmp = Right(sIn, Len(sIn) - Len(sDir))
For j = Len(tmp) To  3  Step - 1 
If Mid(tmp, j,  1 ) = "." Then Exit For
Next

sExt = Right(tmp, Len(tmp) - j)
'имя файла
sFile = Left(tmp, Len(tmp) - Len(sExt) -  1 )



End Sub

Sub testDiv(sPath)
Dim a, b, c
DivideFileName sPath, a, b, c
Debug.Print "D=" & a
Debug.Print "F=" & b
Debug.Print "E=" & c
End Sub


...
Рейтинг: 0 / 0
порезка непролезающих в почту файлов
    #32903527
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
была такая прога split.exe , почему бы ее не взять через shell ?
без обид, это вопрос по поводу велосипеда.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / порезка непролезающих в почту файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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