разбиение файла на части

Тема в разделе "WASM.BEGINNERS", создана пользователем Slaven, 24 июн 2009.

  1. Slaven

    Slaven New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    3
    Здравствуйте!
    Подскажите пожайлуста, как сделать разбиение файла на части на C++
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Какого файла, на какие части.
    А вообщем, очевидно:
    1) если дан размер части, писать соответствующими блоками в новые файлы
    2) если дано число частей, тогда разделить размер файла на число частей, получить размер части и перейти к 1)
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Great
    ну не совсем очевидно, хотя отчасти Вы правы, но если надо разбить текстовый файл из N строк на M частей по K строк.
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Это невозможно. Начиная с vc2004 эту фишку отменили - мотивировали тем, что вирусы при переполнении буфера часто ей пользуются
     
  5. mikityak

    mikityak Забанен

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    160
    Slaven в состав пакета www.masm32.com входит пример AsmCut мож чо найдеш..

    Код (Text):
    1. ;***************************************************************
    2. ;Author:Smallwaves
    3. ;Data:2001.11.14
    4. ;Title:Asm cut evaluation using file-mapping
    5. ;Describle:
    6. ;   This file describles how to cut and combine files using  
    7. ;   file-mapping,I did know it had some errors but although
    8. ;   it was working very good by my test,So WHAT CAN I SAY?...
    9. ;Homepage:  http://smallwaves.yeah.net(Chinese)
    10. ;CopyRight:  (c)Smallwaves's asm studo 2001
    11. ;*****************************************************************
    12. .386
    13. .model flat,stdcall
    14. option casemap :none
    15.  
    16. include \MASM32\INCLUDE\windows.inc
    17.  
    18. include \MASM32\INCLUDE\user32.inc
    19. include \MASM32\INCLUDE\gdi32.inc
    20. include \MASM32\INCLUDE\kernel32.inc
    21. include \MASM32\INCLUDE\comctl32.inc
    22. include \MASM32\INCLUDE\comdlg32.inc
    23.  
    24. include \MASM32\Macros\Macros.asm
    25.  
    26. includelib \MASM32\LIB\user32.lib
    27. includelib \MASM32\LIB\gdi32.lib
    28. includelib \MASM32\LIB\kernel32.lib
    29. includelib \MASM32\LIB\comctl32.lib
    30. includelib \MASM32\LIB\comdlg32.lib
    31.  
    32. DlgProc     Proto :DWORD, :DWORD, :DWORD, :DWORD
    33. GetFileName Proto :dword, :dword
    34. CutFile     Proto c :ptr, :dword
    35.  
    36. .const
    37. IDD_DIALOGCUT       equ 101
    38. IDI_ICON1           equ 102
    39. IDC_CUTFILENAME     equ 103
    40. IDC_SELECTCUT       equ 104
    41. IDC_CUTSIZE         equ 105
    42. IDC_CUT             equ 106
    43. IDC_COMBINEFILENAME equ 107
    44. IDC_SELECTCOMBINE   equ 108
    45. IDC_COMBINE         equ 109
    46. IDC_STATIC1         equ 110
    47. IDC_STATIC2         equ 111
    48. IDC_STATIC3         equ 112
    49. IDC_STATIC4         equ 113
    50.  
    51. RGB MACRO red, green, blue
    52.     xor eax, eax
    53.     mov al, blue    ; blue
    54.     rol eax, 8
    55.     mov al, green   ; green
    56.     rol eax, 8
    57.     mov al, red     ; red
    58. ENDM
    59.  
    60. .data  
    61.     szBuffer db MAX_PATH DUP (0)
    62.     FilterStringCut db "All files(*.*)",0,"*.*",0,0
    63.     FilterStringCombine db "000 file(*.000)",0,"*.000",0,"All files(*.*)",0,"*.*",0,0
    64.     ofn OPENFILENAME {0}
    65. .data?
    66.     hInstance HINSTANCE ?
    67. .code
    68. ;********************************************************************
    69. Start:
    70.     invoke InitCommonControls
    71.     mov hInstance,FUNC(GetModuleHandle,NULL)
    72.  
    73.     invoke DialogBoxParam,hInstance,IDD_DIALOGCUT,NULL,Offset DlgProc,NULL
    74.     invoke ExitProcess,NULL
    75. ;********************************************************************
    76. DlgProc Proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    77.     Local hBrush :dword
    78.     Local rect:RECT
    79.     Local LogBrush:LOGBRUSH
    80.  
    81.     mov eax,uMsg
    82.     ;******************
    83.     .if eax == WM_CLOSE
    84.     ;******************
    85.         invoke  EndDialog,hWnd,NULL
    86.     ;***************************
    87.     .elseif eax == WM_INITDIALOG
    88.     ;***************************
    89.         invoke LoadIcon,hInstance,IDI_ICON1
    90.         invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,EAX
    91.         invoke SetDlgItemInt,hWnd,IDC_CUTSIZE,1440,FALSE
    92.     ;*************************
    93.     .elseif eax==WM_ERASEBKGND
    94.     ;*************************
    95.         mov LogBrush.lbStyle,BS_SOLID
    96.         RGB 85,160,124
    97.         mov LogBrush.lbColor,eax
    98.         invoke CreateBrushIndirect,addr LogBrush
    99.         mov hBrush,eax
    100.         invoke GetClientRect,hWnd,addr rect
    101.         invoke FillRect,wParam,addr rect,hBrush
    102.         mov eax,TRUE
    103.         ret
    104.     ;*******************************
    105.     .elseif eax == WM_CTLCOLORSTATIC
    106.     ;*******************************
    107.         invoke GetDlgCtrlID,lParam
    108.         .if eax == IDC_STATIC1 || eax==IDC_STATIC2 ||eax==IDC_STATIC3 || EAX==IDC_STATIC4
    109.             RGB 255,255,0
    110.             invoke SetTextColor,wParam,eax
    111.             RGB 85,160,124
    112.             INVOKE SetBkColor,wParam,eax
    113.             invoke GetStockObject,NULL_BRUSH
    114.         .else
    115.             mov eax,FALSE
    116.             ret
    117.         .endif 
    118.         ret
    119.     ;************************
    120.     .elseif eax == WM_COMMAND
    121.     ;************************
    122.         mov eax,wParam
    123.     .if eax == IDC_SELECTCUT
    124.     invoke GetFileName,hWnd,addr FilterStringCut
    125.     .if eax!=FALSE
    126.     invoke SetDlgItemText,hWnd,IDC_CUTFILENAME,addr szBuffer
    127.     .else
    128.     .endif
    129.     .elseif eax ==IDC_SELECTCOMBINE
    130.     invoke GetFileName,hWnd,addr FilterStringCombine
    131.     .if EAX!=FALSE
    132.     invoke SetDlgItemText,hWnd,IDC_COMBINEFILENAME,addr szBuffer
    133.     .else
    134.     .endif
    135.     .ELSEIF EAX==IDC_CUT
    136.     invoke EnableWindow,lParam,FALSE
    137.     invoke GetDlgItemInt,hWnd,IDC_CUTSIZE,NULL,TRUE
    138.     INVOKE CutFile,addr szBuffer,eax
    139.     INVOKE EnableWindow,lParam,TRUE
    140.     .ELSEIF EAX==IDC_COMBINE
    141.     invoke EnableWindow,lParam,FALSE
    142.     ;invoke CutFile,addr szBuffer,0
    143.     invoke EnableWindow,lParam,TRUE
    144.  
    145.     .endif
    146.     .else
    147.     mov eax,FALSE
    148.     ret
    149.     .endif
    150.     mov eax,TRUE
    151.     ret
    152.  
    153. DlgProc Endp
    154. ;********************************************************************
    155.  GetFileName proc  hWnd:dword,lpFilterString:dword
    156.     mov ofn.lStructSize,sizeof ofn
    157.     push hWnd
    158.     pop ofn.hWndOwner
    159.     push hInstance
    160.     pop ofn.hInstance
    161.     mov eax,lpFilterString
    162.     mov ofn.lpstrFilter,eax
    163.     mov ofn.lpstrFile,offset szBuffer
    164.     mov ofn.nMaxFile,MAX_PATH
    165.     mov ofn.Flags,OFN_FILEMUSTEXIST OR OFN_PATHMUSTEXIST\
    166.     OR OFN_LONGNAMES OR OFN_EXPLORER OR OFN_HIDEREADONLY
    167.     invoke GetOpenFileName,addr ofn
    168.     ret
    169. GetFileName endp
    170. ;********************************************************************
    171. CutFile Proc c lpFileName :ptr, dwParam :dword
    172. Local lpFile [MAX_PATH] :BYTE
    173.  
    174.     invoke lstrcpy, addr lpFile, addr lpFileName
    175.     ret
    176. CutFile endp
    177. ;********************************************************************  
    178. end Start ;с этого слова заканчивается код программы