QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |正序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
7 c& J) Q5 @2 g//---------------------------------------------------------------------------
5 L' @" ], T8 }) A" a
( q! ~7 u. F0 X$ S7 I, x# i: d) F#include <vcl.h>
+ C  g+ b' C7 F3 v3 c#pragma hdrstop
9 I/ q% L  H, Z: N7 N
( S; o) ~) a! n: V( ~5 h  T0 C1 r; [' ]#include "Unit1.h"
' l+ v, u* w; I+ @) M#include <fstream.h>6 A& b2 {" }  p" L" E
#include <dir.h>
; c* I% J! n1 Q4 h* J( O#include <sys\stat.h>8 p- Q' r" J# X, [
#include <malloc.h># R4 s0 y0 d& Q& p' p& w5 n
//---------------------------------------------------------------------------
) P' Q' ?2 \; @5 @( b( p# S. x#pragma package(smart_init)
6 D+ y/ O) S5 N% J  `#pragma resource "*.dfm"
% l, s& f- W( J3 t0 w* p& L( xTForm1 *Form1;9 c/ c4 ^' F, L7 g, J
        unsigned char *BIN_Byte;3 |, \, r* `, {$ C; M
        long BIN_Byte_Len;8 M: }/ @, ]' M& f2 [# a
//---------------------------------------------------------------------------0 ]$ ^2 t4 U3 o9 q. X# w
__fastcall TForm1::TForm1(TComponent* Owner)  N" |- p  v& k, y2 O0 ^: v8 K
        : TForm(Owner)
8 J( x% y* q! P0 X0 x# G- B{+ z5 t2 r/ `, P# d) z; v
}  N' ?4 [) a  @- i6 \1 X8 {$ }' u
//---------------------------------------------------------------------------8 \/ A1 X! S7 X" G# K$ q% p  V( \
void __fastcall TForm1::Button1Click(TObject *Sender)
4 I  a; J" W0 a/ F6 l{
( L) l; A& ]2 k9 y& C9 C" a        char sPath[MAXPATH];
+ @6 s# Y" Q+ d        struct stat statbuf;+ Z$ K7 l. W  `1 n: i9 f3 T+ u
        FILE *stream;' W! ~6 O# k% b' L4 |
& Q2 z% y* C6 F; k
        getcwd(sPath,sizeof(sPath));: I4 s. Z0 P# [
        OpenDialog1->InitialDir=sPath;
* Z" F# Q! E7 O. H0 M# l. o        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
. d( _4 R6 u3 e2 X6 w        OpenDialog1->FileName="fileFrom.BIN";0 k6 W9 |3 s# k, y, @' Z
        if(OpenDialog1->Execute())
* e5 F8 i. G) a0 H        {& F7 b+ I: P! n
                strcpy(sPath,OpenDialog1->FileName.c_str());
% D3 L( j- ?6 x  Q. q                stream=fopen(sPath,"rb");
& @; j& R+ C4 Q# b$ Y% N8 U# N                fstat(fileno(stream),&statbuf);
& b# @" j3 {/ L# s- O; Y                BIN_Byte_Len=statbuf.st_size;
6 O: ^' \' j! I& b7 r9 Y$ [+ y* ?                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
" T* C4 ^. K, _5 P- r                for(int i=0;i<BIN_Byte_Len;i++)5 \, ~% \4 K% n* _, K3 b
                        fscanf(stream,"%c",&BIN_Byte); //read file% L& s3 X/ y: q# r
                fclose(stream);6 |, t+ m4 ], d# J. q/ E# B
        }4 \/ `) r6 x) r  Y
        free(sPath);. h  x' K9 _3 Q! {$ u
        free(stream);
* `/ T0 Z& W8 r! q}8 }* a6 ^) }, ?% j
//---------------------------------------------------------------------------
- ?: Z! M8 b+ v' V$ x7 U, nvoid __fastcall TForm1::Button2Click(TObject *Sender)
$ x- p! z0 `9 g( d{
9 U* M! h7 q! U' T        char sPath[MAXPATH];( \7 s- d1 G5 n1 a; _2 z- ?* ~
        FILE *stream;6 A5 m/ U- |) J6 c' }
        getcwd(sPath,sizeof(sPath));//App.Path  Y) p$ b  Q! I" Y6 o8 N
        strcat(sPath,"\\");
* \' v! T9 B6 }% @0 N        SaveDialog1->InitialDir = sPath;
) ]6 y4 }2 U+ \5 U5 F+ Z        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
1 i/ h- e' ^- y        SaveDialog1->FileName="fileTo.BIN";
9 p2 r! l/ @# j8 H0 f. J        if(SaveDialog1->Execute())1 a3 R" K5 K8 W9 D# H+ e
        {4 K/ v1 j( M) j. v
                strcpy(sPath , SaveDialog1->FileName.c_str());1 w5 u, Z8 z7 G& w9 y- E& \8 n
                stream=fopen(sPath,"wb");3 I1 z* g/ J! `6 F3 X
                for(int i=0;i<BIN_Byte_Len;i++)
1 `  Q0 R9 \# O0 ]                        fprintf(stream,"%c",&BIN_Byte);  //save file- V# Z5 A, k* |$ s' h( h; u/ d
                fclose(stream);
( v* H* b) ?: x! {9 x0 t0 ^: `4 k        }7 E' S' E' R- D! N& D, A
        free(sPath);
. f$ |4 d# N" \        free(stream);; P. g( X4 L# S. Y; B3 L; @. K
}
. @! `) ?* R- ?//---------------------------------------------------------------------------; v6 d0 N% K* S" x/ _
void __fastcall TForm1::FormDestroy(TObject *Sender)+ }3 f: y" Y  s' X% {
{- \. ]2 l( f( X( ]1 C; y  s( w
        free(BIN_Byte);
& }$ l$ O( ^- t# ], P8 f$ @2 E/ f}& V; k3 \9 |# |* }% }3 T
//---------------------------------------------------------------------------
. W! [2 l1 S5 p* E5 g  J( t$ h' X/ J! _; g6 c" B# g
打開一個檔案,再另存為另一個新檔案
+ g7 h) D- F7 m結果兩個檔案內容一樣
- o* i, i6 L- \: w5 d順序不一樣了: B" \! e: T9 K
檔案前面一段內容跑到結尾去了
+ Z4 d( C2 r$ Y1 C7 |就像下面的情況
1 R, C9 j% z7 f1 u) p原來檔案內容:ABCDEFG
) D$ Y  T  W" \% p/ [1 F% M新檔案內容:CDEFGAB) o* ?! _- H7 _4 B3 l0 }
老大救救小弟哦( R" `; L% {* }5 b
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
本人方年22,学识渊博,英俊潇洒,七岁学文,九岁习武,每外出行走,常引美女回头,帅哥跳楼!
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

high_hill        

0

主题

0

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

<>不知道你找出的问题在那儿,我判断是alloca和malloc的误用。c++中对指针(内存)的操作总是容易出错,这些系统函数的使用,最好先仔细看看help。</P>! {: e9 t+ `* S, O+ {  t0 z
<>alloca:</P>) I0 {1 \) n. `, ?
<>Allocates temporary stack space.</P>
: `% ], D% N6 {. n* p; w  s) \<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
) ]9 d+ e3 V6 O) {<>malloc:</P>/ P0 N, t0 t. Z; @; j8 A2 G- \
<>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>
; g$ p2 J& x0 _/ ]<>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>3 T- A% ^  Z- t7 A8 a
  Y$ T+ ^# _$ r" [3 n) D
<>以下是改后的代码</P>
& b8 K1 O9 q2 s8 M8 r2 U: G<>//---------------------------------------------------------------------------</P>4 G3 ?7 ~5 g2 t
<>#include &lt;vcl.h&gt;
4 j  s* t+ `9 b# E7 G3 u5 l( |#pragma hdrstop</P>5 R4 n# f7 C6 \, p
<>#include "Unit1.h"4 |+ [$ d8 ~  Y. J1 J" S  ?9 K# D
#include &lt;fstream.h&gt;; r/ g) b) @1 I4 a6 _4 z, g
#include &lt;dir.h&gt;* B% m: Y- J# N2 J% f! Y# v2 [
#include &lt;sys\stat.h&gt;4 T5 }3 K* k9 P& n5 h2 X9 `
#include &lt;malloc.h&gt;
2 i7 ^+ c; s2 q7 L7 Z' s//---------------------------------------------------------------------------0 z9 \' k7 e) `2 t
#pragma package(smart_init)4 b* w6 C0 C0 s. b1 Y) n) Y
#pragma resource "*.dfm"0 A7 U" K6 h0 y
TForm1 *Form1;1 D. U3 J" E. \* ~( W0 u  w5 F, q
        unsigned char *BIN_Byte;: o" l# D# b$ f, J
        long BIN_Byte_Len;# O5 l! l' z) S( R( X
//---------------------------------------------------------------------------) x! L3 }- H7 `: _6 s/ ]
__fastcall TForm1::TForm1(TComponent* Owner)/ T: d/ q7 m) B3 Q: F3 W
        : TForm(Owner)
$ Q( t8 Q- `1 B{0 x* ~9 y& Q" \$ u+ `
}
( @3 p" n, ^% o. b( o. O. ?( H) l//---------------------------------------------------------------------------
5 e# X  [) e5 Fvoid __fastcall TForm1::Button1Click(TObject *Sender), N" ?: W- M1 I6 |  Y
{
( O' p3 o- C, k: o) B: m! e: O9 j        char sPath[MAXPATH];' v/ u; ^! J# r0 N1 A% n5 k
        struct stat statbuf;
9 N6 f7 H0 w# \. q* ~, G8 v& C3 D        FILE *stream;</P>% n) U! S& V2 O3 V/ b; u! R& N" Q
<>        getcwd(sPath,sizeof(sPath));! G2 R* N1 b! E& h
        OpenDialog1-&gt;InitialDir=sPath;
' [/ p% ?: r* w5 J8 ?        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
( l/ r6 d4 {  r' ^8 m# a( n' R" _9 T        OpenDialog1-&gt;FileName="fileFrom.BIN";. N3 y( G/ w0 p. q& h1 m1 O
        if(OpenDialog1-&gt;Execute())# `! |9 F8 ^0 m" s
        {6 c2 Y) g8 l4 D* x
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());  \  f) Y/ k) ^3 \! z0 I3 G4 `
                stream=fopen(sPath,"rb");
' ]' j' z+ k  ]2 v* {( G$ z                fstat(fileno(stream),&amp;statbuf);
. G) N  u9 @7 Y$ z                BIN_Byte_Len=statbuf.st_size;7 E( W+ D1 K3 U/ U# z/ I
                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
1 \2 a( c, \$ }' }( e; Q" ?: w                for(int i=0;i&lt;BIN_Byte_Len;i++)
- X2 q2 ~$ B: S5 t6 K; W; F6 ]                        fscanf(stream,"%c",&amp;BIN_Byte); //read file0 l. a. U! q& L. Z
                fclose(stream);
1 y6 Z3 y) A  P. @/ y        }
3 ]% A8 y' x0 W( t}
( A% a4 L/ H( K) h* `/ i//---------------------------------------------------------------------------
' ?" f8 x7 i3 C5 Ovoid __fastcall TForm1::Button2Click(TObject *Sender): l9 r3 M2 p4 g- H  J; s* X# P$ d
{
8 P& \( G- }! ?5 X( `        char sPath[MAXPATH];
  T/ ~( Q7 Y) p2 b% [& w* ]        FILE *stream;
. z4 b4 R( Q/ S$ Y0 r        getcwd(sPath,sizeof(sPath));//App.Path
* Q$ H) U7 b0 Q; @        strcat(sPath,"\\");6 Q# g& y  u1 K$ G$ m8 n
        SaveDialog1-&gt;InitialDir = sPath;) k2 D, {5 W( H' `- ]
        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
- ]3 I- J" c3 v" t$ i        SaveDialog1-&gt;FileName="fileTo.BIN";
8 Q) }( F9 e6 q+ g        if(SaveDialog1-&gt;Execute())6 `/ h+ R- r: _3 q3 c
        {5 Z& O( g; B  w! z. G
                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
! [9 H$ U9 R- D, a0 y" X                stream=fopen(sPath,"wb");6 A% k8 ?: @. p
                for(int i=0;i&lt;BIN_Byte_Len;i++)1 U. a0 M( u  n" o+ W
                        fprintf(stream,"%c",BIN_Byte);  //save file
. Z) `4 R6 i- q9 ]. }                fclose(stream);
8 a! k  O' R& N2 L1 {        }
2 j+ d  y: h" r; A# Z        free(BIN_Byte);
1 [# j7 M1 A7 f2 x}% @3 Q5 ~( X* i! }
//---------------------------------------------------------------------------
' A, n" ]4 H8 Qvoid __fastcall TForm1::FormDestroy(TObject *Sender)' Z; O  ^' P, C9 y4 R
{  i) K3 b  q8 {5 H; G
        if (BIN_Byte!=NULL)/ p; `% x5 G/ X, B" E; S
             free(BIN_Byte);, U: |! _0 C9 d* ]* k0 |: k
}! V: B1 C) N* m& R" S3 h4 p
//---------------------------------------------------------------------------
' _7 X% K0 g" k: {$ ~3 a0 q</P>
  R& \1 b% b+ H; F+ o. S- ]5 t+ P<>free(sPath); free(stream);此两句也有问题。</P>$ G$ o! A+ @$ j) u
<>char sPath[MAXPATH];不需要释放;</P>" n; x8 D1 H' i/ X! s  _3 p
<>fclose(stream)已经起到free(stream)的作用</P>, n/ B' B1 g& Q% F, ^+ C; ~
[此贴子已经被作者于2004-6-15 15:16:40编辑过]
回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

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-6-12 19:59 , Processed in 0.441095 second(s), 82 queries .

回顶部