QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;& [9 d( n3 o" ^- q* k
//---------------------------------------------------------------------------
7 m8 Q- F% @$ O3 O5 f3 }6 Q1 R8 Z
( g- y; J9 |' a$ ^  c#include <vcl.h>$ o; j; J- Q; r$ O* U
#pragma hdrstop" P9 F4 t5 F+ ^4 N: Y* s$ F$ M* q, S
1 [; d4 I+ ]6 T/ E5 y+ ]
#include "Unit1.h"+ J& B# c* i) \
#include <fstream.h>7 L4 [. ~4 ~3 F" I9 ?" u
#include <dir.h>
" |9 @& N, h/ \# }' i#include <sys\stat.h>
1 ^/ c. u. ?# s4 U#include <malloc.h>0 L0 E  E$ v5 ]
//---------------------------------------------------------------------------
+ D5 e, E7 t3 |% B) _: |#pragma package(smart_init)- I" c( z8 i6 G8 H) ]
#pragma resource "*.dfm"+ L+ s0 v* b9 [, {- V- v0 x
TForm1 *Form1;
( t! }' v2 |) B: \        unsigned char *BIN_Byte;" p! y, p4 s/ A4 E& y/ h; P' |% ^( L
        long BIN_Byte_Len;# a& ^2 y  q+ t3 h! B0 ]/ F2 C) }
//---------------------------------------------------------------------------
& Z* {8 y( ?+ F$ E__fastcall TForm1::TForm1(TComponent* Owner)6 o. J3 |( s' D5 {2 Z
        : TForm(Owner)
  I- U: t5 w7 @% |4 z# M{
3 j; R- ]3 B( F' p, R) }}1 j4 f5 b9 V5 r- S* C5 J
//---------------------------------------------------------------------------" ]$ h' W8 z' i
void __fastcall TForm1::Button1Click(TObject *Sender)
) G+ `7 W' k' s4 V" P/ j{! L9 i/ V$ A1 L, v: `- U9 T; `
        char sPath[MAXPATH];
0 _) N' f: b5 G! n7 v3 d        struct stat statbuf;  y! s, l! ?3 O( K# J7 s
        FILE *stream;
# r: f0 S# ~9 c! I: q' j* ^$ w% J: m* w' j" M# X* c( X  }4 v! S
        getcwd(sPath,sizeof(sPath));( ]4 s2 t4 p9 E
        OpenDialog1->InitialDir=sPath;
; z! r+ i  k3 e% y' g3 D* o% `        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";8 F8 h- U( @0 t5 d0 }3 n2 N
        OpenDialog1->FileName="fileFrom.BIN";
! ?+ t# q4 _7 R0 B; F3 k        if(OpenDialog1->Execute())
0 i) m/ E4 f3 y0 s( M        {
1 u& m* H' L0 I) r. A& G                strcpy(sPath,OpenDialog1->FileName.c_str());( C: l: h1 V0 @' _8 Y, E( n0 P8 f
                stream=fopen(sPath,"rb");
7 i( m; W8 K  c4 |5 D+ O; t                fstat(fileno(stream),&statbuf);' M5 P: @& T8 k, [2 }4 L6 v
                BIN_Byte_Len=statbuf.st_size;
) t/ C7 D7 f5 p2 Z  Z7 c                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
4 Z  V/ ?* s6 P, B! b" ]                for(int i=0;i<BIN_Byte_Len;i++). }) R8 @; @4 a4 U
                        fscanf(stream,"%c",&BIN_Byte); //read file
- R+ x  Z3 I6 @* a8 r2 D4 a                fclose(stream);
( t% t+ j) v% I3 {        }, o0 M! I1 I1 {# X( H1 f
        free(sPath);" K1 Z7 d7 _2 s# M% q4 C
        free(stream);, o+ f7 \, @8 X, ~+ o' g
}4 ]( @( n6 {) h: T4 {
//---------------------------------------------------------------------------
9 @4 G+ F' f, Zvoid __fastcall TForm1::Button2Click(TObject *Sender)* r/ ]. P5 S/ f( f8 z) U. V
{/ |/ c8 S$ |  A7 V$ `: ]- h# @6 q  p7 G
        char sPath[MAXPATH];5 L) J4 N, o4 u2 o+ [3 `
        FILE *stream;
0 I; K7 ^# z& ?& |/ |        getcwd(sPath,sizeof(sPath));//App.Path3 {( x+ M' _- |5 l! O3 l9 H
        strcat(sPath,"\\");+ b  V6 e/ C8 [  h& C8 t: v- ~6 N
        SaveDialog1->InitialDir = sPath;
( C; W+ u4 y& A" L% q# W        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";/ a, v3 u( S1 N- U6 [( W& v
        SaveDialog1->FileName="fileTo.BIN";. e1 A7 ~- p8 T6 l' c7 I' L
        if(SaveDialog1->Execute())( ~# D" E. z; C
        {
4 h) O7 |( n1 x4 x* S. h+ R                strcpy(sPath , SaveDialog1->FileName.c_str());0 L5 I0 B( Z! v9 K9 @
                stream=fopen(sPath,"wb");' F: v  F$ y( [* j% C" q' `. d
                for(int i=0;i<BIN_Byte_Len;i++)( h5 E: I7 [) x" H: v5 \% f) b- {
                        fprintf(stream,"%c",&BIN_Byte);  //save file
6 @6 Q  P, C& M/ v% u1 K9 a- [3 H* K                fclose(stream);- k9 l+ R) ]* m
        }7 w, @5 w6 T7 K% _- z
        free(sPath);
& G6 ~) w# C2 c        free(stream);
8 I2 a5 p  C, @1 p# n$ p6 w5 b}
  h: S2 q- H( _' R# _% I//---------------------------------------------------------------------------
& v; V7 u- W: }9 e, S3 V5 v% ?! Uvoid __fastcall TForm1::FormDestroy(TObject *Sender); R8 w( T7 W; S5 f. [. Q
{
& H) c& d4 W( ?, o+ L        free(BIN_Byte);+ @8 r; @& v8 V6 T1 t8 e. [
}
% M$ s: F7 j1 K  @" Q/ U( X; H0 I. f//---------------------------------------------------------------------------- K5 Q+ _3 [* q3 k

; p* G* z/ H& m) R3 `打開一個檔案,再另存為另一個新檔案
* p6 j: K& C* [1 C: C1 A, y結果兩個檔案內容一樣
1 p2 \" w, Z) G' Q* _! R順序不一樣了- |2 i9 {9 Z; i; `/ ?
檔案前面一段內容跑到結尾去了
6 ]2 D3 Q/ R' b8 i5 w6 m) ^就像下面的情況
9 s( _- \' {8 }8 Y4 p2 Y" b% c原來檔案內容:ABCDEFG
4 D& Z: v; _# s' Z2 q0 }2 {新檔案內容:CDEFGAB+ f1 g% u" Y0 o# p8 ]' `* S  n6 a
老大救救小弟哦
3 X6 f! W/ k6 i$ D* l! k8 V
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>9 o# b. A3 i; r$ {8 U' ]) ], R/ @
<>alloca:</P>
! `4 I9 Y2 c% ~7 @. `8 m/ d<>Allocates temporary stack space.</P>3 o& T* U( {9 y- ?0 \# I$ m
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
# |2 J  [1 E% L<>malloc:</P>
7 v% l# k" b9 H& T  ^: i<>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># y1 \+ \3 B! l6 y" I: p4 E
<>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>! r! c9 l" d7 m7 s

4 R' e& o- R. }/ P0 e; A<>以下是改后的代码</P>
! t0 A- @4 u9 s; Z<>//---------------------------------------------------------------------------</P>' S8 ~4 d9 D" j3 m4 k! I+ q) k
<>#include &lt;vcl.h&gt;) F8 R+ g3 Y& A3 e% `
#pragma hdrstop</P>
4 j) a4 R2 E" @" R0 s$ j<>#include "Unit1.h"
2 m; @" J- g& a; Z( n1 E1 a3 G#include &lt;fstream.h&gt;
' H$ |" a+ n& `* X# V; x#include &lt;dir.h&gt;
: z; E2 P+ a2 }0 `#include &lt;sys\stat.h&gt;) ?$ _- M, ?0 E% N: H( |% i
#include &lt;malloc.h&gt;
% T7 ]9 g) M3 L* u3 n( j) w//---------------------------------------------------------------------------5 E4 W+ \1 R3 t3 X  n4 b
#pragma package(smart_init)
4 K1 b& W8 K6 Z* ~#pragma resource "*.dfm"
5 q2 h) q6 C4 E6 o$ dTForm1 *Form1;
- `' Z8 i7 l' ^. r  |$ i1 t* @        unsigned char *BIN_Byte;9 @! N+ l3 L$ Z6 a: f+ `
        long BIN_Byte_Len;
1 f: W+ A! h! z; o  ?$ P1 T//---------------------------------------------------------------------------( w) b" R5 m7 d7 x2 \
__fastcall TForm1::TForm1(TComponent* Owner)
, D$ u6 m  {2 r( A' j% G0 x- c        : TForm(Owner)2 R7 W( |  y: X1 f
{
  W+ V! }. V+ X) q, S: U}
; F% `0 H: V: ]4 _$ x  S; g//---------------------------------------------------------------------------" }' @* k0 L; _2 I
void __fastcall TForm1::Button1Click(TObject *Sender)
# C; K4 G+ n( Q+ D* n# b& Z{
/ [% G* }; C9 f% C+ B2 E" l        char sPath[MAXPATH];( K0 Y. y" p) y3 R
        struct stat statbuf;
7 P1 i; t/ [$ u# Y        FILE *stream;</P>
% `6 a  Q* ~( Y2 c7 t- M<>        getcwd(sPath,sizeof(sPath));, p2 g. V7 F- V! T/ {1 l
        OpenDialog1-&gt;InitialDir=sPath;; a1 A" H1 z% E5 Z6 A" W
        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
+ v- K6 [8 P* h# E* z        OpenDialog1-&gt;FileName="fileFrom.BIN";% k1 G; M$ U) `( y
        if(OpenDialog1-&gt;Execute())) {" L1 y7 V2 }/ f3 p6 H
        {; O' M; A1 ]/ w" T8 J+ M
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());
' G) R6 H9 `- {# h7 g$ [& N' \% P$ ?                stream=fopen(sPath,"rb");& q9 k" m# j) o& T6 R) J# b. O
                fstat(fileno(stream),&amp;statbuf);5 ?9 P- B5 }( c( o! ^. ]) x
                BIN_Byte_Len=statbuf.st_size;
" T. b1 y0 H; p0 W                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);1 a" @0 P7 K5 `+ W1 }8 m8 f
                for(int i=0;i&lt;BIN_Byte_Len;i++)$ e$ _% g8 T4 F0 T( Y) M1 J$ L0 H
                        fscanf(stream,"%c",&amp;BIN_Byte); //read file3 D4 F' u$ ]! c
                fclose(stream);
# M; [; ?/ j( P% p) q; A; S        }
  H4 H1 G' E3 k( U* Y2 k9 K/ a}
# J& K4 d4 l+ M: N7 g* ^//---------------------------------------------------------------------------
* d* G4 x% c' ^* F  Cvoid __fastcall TForm1::Button2Click(TObject *Sender)/ Y& h# A& f: `, t) Z; b
{
$ R  {6 }# l! h        char sPath[MAXPATH];
# |8 h# {9 x8 A5 F        FILE *stream;
9 j8 Q; T. [7 k; Q3 A. u        getcwd(sPath,sizeof(sPath));//App.Path
. {) d3 R# O8 K4 E1 e        strcat(sPath,"\\");
5 F( T, k# M2 s; b- l: E        SaveDialog1-&gt;InitialDir = sPath;
. Y% E) V( r4 }( k, t7 ~# |- N/ y        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
" g7 ], E/ B: K6 b% @# ^! I        SaveDialog1-&gt;FileName="fileTo.BIN";3 j6 s2 x" W! T: e; c
        if(SaveDialog1-&gt;Execute())! Y) q9 y0 A0 D6 B
        {
( l5 y+ |! _; S" p$ G, F7 }                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
5 Z: V4 m9 u% V0 q+ b; s                stream=fopen(sPath,"wb");9 Q8 m3 B2 F1 e, K; j# Y) N
                for(int i=0;i&lt;BIN_Byte_Len;i++)% o. B% u! g; z( g' n
                        fprintf(stream,"%c",BIN_Byte);  //save file
9 Z' F0 J: h7 ]% _                fclose(stream);( O$ G, O1 x0 q) Q2 v, F
        }' k0 [; b( R9 w1 {# v; s' ?  `9 c
        free(BIN_Byte);
$ V  \) B2 c& b( O}; {( q, J1 R- a" U$ {& R
//---------------------------------------------------------------------------2 O1 x, A# q. S# g  S( J
void __fastcall TForm1::FormDestroy(TObject *Sender)0 h# G9 w* c  m! T
{8 F- j1 ?% K  B
        if (BIN_Byte!=NULL)
( n" G- y& G/ X+ z/ D) P             free(BIN_Byte);; f# l: Q" f, j- G" T+ ^
}" n( d: k* T5 g  N7 ]
//---------------------------------------------------------------------------# }1 ?: @. T1 B) H' z
</P>) ?5 k8 p+ V+ V6 `( |( h8 v; v
<>free(sPath); free(stream);此两句也有问题。</P>
/ x7 j7 I4 ]+ b3 p% @<>char sPath[MAXPATH];不需要释放;</P>
9 f, k) @  F" ~, K* x<>fclose(stream)已经起到free(stream)的作用</P>% D1 P1 [6 i, w; F
[此贴子已经被作者于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-4-20 15:24 , Processed in 0.556745 second(s), 83 queries .

回顶部