QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2503|回复: 5
打印 上一主题 下一主题

老大,簡單的文件操作程序,不知道錯在那裡!救命阿

[复制链接]
字体大小: 正常 放大
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
7 S: c) I' R+ U& r! x  f//---------------------------------------------------------------------------  y% o4 P; m) ~# L  p) z+ x

; q3 A1 C; C+ N1 h, @: z* V* w( R#include <vcl.h>
) I! H/ ~6 g5 Q/ H#pragma hdrstop
- E: }' P1 z7 L3 m( U- P* ?
0 S  g, w: ^) P#include "Unit1.h"
4 r2 ]7 l) D4 j* U- E' X#include <fstream.h>
7 Q) O7 G; D, N- t5 x! w& z#include <dir.h>' }' [2 l! z8 A' s$ M
#include <sys\stat.h>
7 n  D: g- p) U' j" D" [#include <malloc.h>! ~. x- d; k# V  w% a
//---------------------------------------------------------------------------
, C! s- p! w& I3 a# x  l6 n#pragma package(smart_init)3 H/ B4 ]) {- Q% C, ?! U7 Q
#pragma resource "*.dfm"
6 u- n/ n/ [+ j- x( r8 ^TForm1 *Form1;
8 d; W: d& q! Q" Q        unsigned char *BIN_Byte;
5 H6 f' Z4 N) l% o$ u2 R        long BIN_Byte_Len;5 _1 F4 r8 L0 S, o  h
//---------------------------------------------------------------------------
8 S" y' n% }# N__fastcall TForm1::TForm1(TComponent* Owner)2 Q2 u' g# m5 d( F; x" Q
        : TForm(Owner)
0 j+ o: `. x, B0 a0 I( O{
( a% A% U" X1 p4 [/ t( m}2 ^+ v6 i5 s" w8 Y: g  W3 m# \# P
//---------------------------------------------------------------------------
* k( Q3 I/ W# F0 {void __fastcall TForm1::Button1Click(TObject *Sender)+ ~& R: j0 |; R, X8 Y/ M: T
{
# D+ [0 p+ z3 c& A7 q+ y/ A2 H        char sPath[MAXPATH];) M2 b  {6 {7 u- R
        struct stat statbuf;
8 |8 N# Y. A3 X" ]        FILE *stream;. o" x8 Z( ^9 w7 S( `

# E+ x+ H8 N, W3 W        getcwd(sPath,sizeof(sPath));: l" W) v5 e0 x: x
        OpenDialog1->InitialDir=sPath;! ]% `6 v0 I, E6 r1 W( s! V
        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
) u2 |  f" `7 v7 h        OpenDialog1->FileName="fileFrom.BIN";
9 b# U6 U5 l  k! h" }% F" W3 ]        if(OpenDialog1->Execute())
/ F; Y, a$ t' b$ z3 `6 R        {% a( q" l( `7 c) d0 I2 A
                strcpy(sPath,OpenDialog1->FileName.c_str());
( S% |( z4 ?# Q$ ]$ o                stream=fopen(sPath,"rb");3 ]/ n" W- ]. u5 _# M1 E8 M
                fstat(fileno(stream),&statbuf);
. S4 g; g5 J5 m, y; a+ z' H+ }                BIN_Byte_Len=statbuf.st_size;2 J. U7 h& B0 O8 b8 P' x) s% U
                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
, H. `/ H, @6 W                for(int i=0;i<BIN_Byte_Len;i++)4 M1 J8 @( x# x4 f2 \
                        fscanf(stream,"%c",&BIN_Byte); //read file6 {4 U: K/ c/ o2 D6 J
                fclose(stream);! t# O% }9 N  [0 S4 ^
        }
! e- b  i; @: ^1 O: I        free(sPath);
4 ~( k8 i: z" y  P2 M7 V/ x        free(stream);5 u; A. B. y( Y" C6 {
}
5 c4 ]: r9 Z! U1 u: c//---------------------------------------------------------------------------4 F) d; G7 z+ p; V. S; X
void __fastcall TForm1::Button2Click(TObject *Sender)9 y% [) L9 c0 Y0 w: F
{6 L1 B' l1 o  S: x
        char sPath[MAXPATH];
  J. d9 `! m( m" d3 |4 k6 r3 l        FILE *stream;
' P. Z$ m' h5 \( Q- H+ _        getcwd(sPath,sizeof(sPath));//App.Path
" h; Y7 J4 J4 o, E        strcat(sPath,"\\");6 f' |& L' R6 D! N# C/ }
        SaveDialog1->InitialDir = sPath;+ V$ L" Z! I# m' E7 W, {
        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";6 x0 Y5 h, R( l* q
        SaveDialog1->FileName="fileTo.BIN";
) h" _8 U% e2 S2 @+ i9 w" r        if(SaveDialog1->Execute()): p, D8 a* `8 }. t
        {) p% q; Z1 H7 ]+ Y! n7 |
                strcpy(sPath , SaveDialog1->FileName.c_str());% ~# v% q) W0 |0 r$ w5 O
                stream=fopen(sPath,"wb");
2 Z3 ?5 y5 i% V0 O$ V, N. j! ]                for(int i=0;i<BIN_Byte_Len;i++)! E' M3 O! s5 _% U3 G+ m. a0 _
                        fprintf(stream,"%c",&BIN_Byte);  //save file
% e! t( h" I% G4 {  n5 o                fclose(stream);: J3 M' E8 P; x# S( J4 W( n( a; v9 p
        }5 \8 |6 j" P* ~: ~( `. \
        free(sPath);; m/ @$ n$ U9 M1 l+ U2 b! Y
        free(stream);/ N7 |  {9 ~% `8 z
}8 l/ o) r1 L3 q
//---------------------------------------------------------------------------' n! z- l4 j% m+ Y1 O- T
void __fastcall TForm1::FormDestroy(TObject *Sender)/ V9 ~/ U  _: ^4 o; ~- |9 ?5 X
{4 p& Z: k* a/ a( x& |6 r. I
        free(BIN_Byte);5 M' x8 a% z2 d, r
}
+ `5 Y2 U5 b4 n. y//---------------------------------------------------------------------------
2 |1 m: o0 A- _/ y; A
7 s. a- u4 ~$ o8 w/ N打開一個檔案,再另存為另一個新檔案
" b- C& N  L' s( ^" b/ g; d+ a結果兩個檔案內容一樣
# O3 b$ b: X# }0 Q* u4 p順序不一樣了$ |9 M7 N$ f/ q9 I$ L, X- L9 ^
檔案前面一段內容跑到結尾去了
: n. V( h; B7 r9 d就像下面的情況" f: R# ^# L$ E7 A* j
原來檔案內容:ABCDEFG- m4 ]7 X" C$ \+ \0 J
新檔案內容:CDEFGAB" _2 S! v2 [+ a5 L
老大救救小弟哦2 E; }: L: W; K) @% P
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
本人方年22,学识渊博,英俊潇洒,七岁学文,九岁习武,每外出行走,常引美女回头,帅哥跳楼!
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

high_hill        

0

主题

0

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

<>不知道你找出的问题在那儿,我判断是alloca和malloc的误用。c++中对指针(内存)的操作总是容易出错,这些系统函数的使用,最好先仔细看看help。</P>! q0 A6 h4 o6 f1 \' M  C8 V
<>alloca:</P>
9 A2 ~4 g5 {: ?# y$ M) e& I4 g<>Allocates temporary stack space.</P>
/ b, t8 w- r2 ?) U" t1 @2 o<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>8 m$ V8 l, k1 ?3 O# d1 t
<>malloc:</P>
4 C8 H- S* Y: J; Z# u: ]<>malloc allocates a block of size bytes from the memory heap. It allows a program to allocate memory explicitly as it抯 needed, and in the exact amounts needed.</P>4 ~" Y. X! l8 N2 H# K+ I* r, o
<>Allocates main memory.The heap is used for dynamic allocation of variable-sized blocks of memory. Many data structures, for example, trees and lists, naturally employ heap memory allocation.</P>
/ D2 Y: n* h% j, P; q, X3 D! t; Q- ~9 z  \! o
<>以下是改后的代码</P>9 S" V7 k7 e, ^2 `/ |
<>//---------------------------------------------------------------------------</P>
0 {- M% |+ \) h1 {# S<>#include &lt;vcl.h&gt;
; C+ v4 P* `9 n2 T0 e5 K#pragma hdrstop</P>! ?2 o' n% v$ m
<>#include "Unit1.h"
0 l- ]+ {2 `% v" P+ Z#include &lt;fstream.h&gt;
9 n& G. {. g0 i- |8 b#include &lt;dir.h&gt;
$ N+ B: B' T+ n#include &lt;sys\stat.h&gt;
9 H4 v# c: M, C; {2 \, W+ y3 O#include &lt;malloc.h&gt;& B( Z! v% Z/ h& P/ g! I0 D
//---------------------------------------------------------------------------
+ y0 N5 I2 m( t) U! P#pragma package(smart_init)
9 y5 i. v* a1 w7 W* c2 b6 F#pragma resource "*.dfm"
: n& q# B, h5 k- N& W9 m2 Z" lTForm1 *Form1;9 _( i$ s! O  b+ u# C5 ^
        unsigned char *BIN_Byte;
0 b0 v  |5 a) z        long BIN_Byte_Len;0 w9 L) y1 g7 G, S# u
//---------------------------------------------------------------------------+ F0 p9 P. g1 b1 u# x: k
__fastcall TForm1::TForm1(TComponent* Owner)
) P1 `) B. Z0 p& j0 \        : TForm(Owner)8 y2 C4 Z) H. g7 O4 ~
{
& ]) P; X5 E3 b}- `( M. c+ b, Z# R$ S- R6 x- d% I
//---------------------------------------------------------------------------
8 N( G$ k; ?; O% {4 g# \3 Dvoid __fastcall TForm1::Button1Click(TObject *Sender)  A5 f% e! g7 i5 j! S
{% `4 b) L0 s8 u: Z
        char sPath[MAXPATH];6 v0 g' P8 y* W1 D* E7 y
        struct stat statbuf;
; e  ?& S6 h3 {$ B& ~1 h" r        FILE *stream;</P>2 b2 [3 _/ R# c9 L! \
<>        getcwd(sPath,sizeof(sPath));
+ x& m* n4 }% \3 g- P& y        OpenDialog1-&gt;InitialDir=sPath;
( f8 d; \, ^+ W6 k# l        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";) B4 [- [! A( v6 e4 F- R, ^
        OpenDialog1-&gt;FileName="fileFrom.BIN";! P; p# m8 @  {) n8 ~. D% r
        if(OpenDialog1-&gt;Execute())( ]" e: i( s* d
        {( V7 \2 |) @+ X1 |$ n
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());
$ G) r; r4 N2 h* B# o/ L) e                stream=fopen(sPath,"rb");
$ Z# o7 ~* f. P- B9 w6 C                fstat(fileno(stream),&amp;statbuf);
" {0 J: ?& G0 X& `8 m' V                BIN_Byte_Len=statbuf.st_size;2 L1 o3 |& h5 t: `0 t" I8 B% A
                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
  l$ H# K& e3 T                for(int i=0;i&lt;BIN_Byte_Len;i++)
5 g$ _9 L- \6 F( P8 S6 [8 r                        fscanf(stream,"%c",&amp;BIN_Byte); //read file- r. M9 m! w5 B9 }  B+ Y3 l
                fclose(stream);( h$ h0 i' z5 ~* R  r  ?4 Q
        }; w# z7 o8 _% c3 r
}' O6 @6 s$ Z$ O, I  \
//---------------------------------------------------------------------------: ^8 \3 a( {3 H; T; e; q
void __fastcall TForm1::Button2Click(TObject *Sender)
4 V7 |. ?6 p: U' d! Z4 I1 u{
  R- L8 q6 i7 a        char sPath[MAXPATH];* l- R( ?: k$ _9 w, {
        FILE *stream;
3 y+ P' \  X, u2 Z" p        getcwd(sPath,sizeof(sPath));//App.Path
1 g/ H  l+ d# r        strcat(sPath,"\\");
0 C( O" J1 J- W! i        SaveDialog1-&gt;InitialDir = sPath;
, }. f$ `8 m# B        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";& C6 @! {; c; Z7 O# p$ ~
        SaveDialog1-&gt;FileName="fileTo.BIN";
+ `7 E( s: S! f* ?( o& S. g6 J        if(SaveDialog1-&gt;Execute())
6 h, d- O- X. \( F        {! R8 r( E5 S" d4 P& k: I- p, Z
                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());5 X+ I6 z9 s6 a3 C4 D- }$ N8 P
                stream=fopen(sPath,"wb");
* ]* O/ ^  u) K" [  c- r                for(int i=0;i&lt;BIN_Byte_Len;i++)2 J) x8 ?7 z6 c; x8 k( M  t
                        fprintf(stream,"%c",BIN_Byte);  //save file
5 m9 {0 c4 D/ q& e! b4 P                fclose(stream);
) H' X7 p0 {0 T- q        }
5 T9 c" ~' i! P+ S. n        free(BIN_Byte);# P6 s! X+ h. Z
}
) I1 f+ F! u! h9 u8 W' D; G, O; P8 z//---------------------------------------------------------------------------
: J8 K: u2 A9 v. A9 q8 r  tvoid __fastcall TForm1::FormDestroy(TObject *Sender)$ S. A, m/ C# I0 E0 K
{
; w6 `, f  D; t" a5 X" F2 T9 \        if (BIN_Byte!=NULL): A, n5 J2 c0 w1 o+ }% ]
             free(BIN_Byte);
. @* U9 m; S  \0 D5 i2 c4 \! r}: w/ g( F' P7 \2 A  b% {0 Q- _
//---------------------------------------------------------------------------
! x" A+ i6 g4 Z# v1 a. R# n7 L6 J! B7 u</P>3 M* i& B( }; u! x8 f8 ?1 U
<>free(sPath); free(stream);此两句也有问题。</P>
8 e& u0 M$ s6 i2 ^0 T<>char sPath[MAXPATH];不需要释放;</P>
* V  w- _5 [) ~% y& q/ w<>fclose(stream)已经起到free(stream)的作用</P>/ i2 H* S) K; X1 K) M
[此贴子已经被作者于2004-6-15 15:16:40编辑过]
回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-7-21 01:40 , Processed in 0.373232 second(s), 83 queries .

回顶部