[Delphi:90329] Delphi6 で ExtractFileDirの障害

118 views
Skip to first unread message

中村 隆

unread,
Mar 11, 2008, 4:10:40 AM3/11/08
to Del...@ml.users.gr.jp
いつも参考にさせていただいています。

早速ですが、次のソースを実行すると


Edit2.Text := ExtractFileDir( 'n:\現場2\070703打合せ.xls' );

期待した「n:\現場2」ではなく「n:\現場」になってしまいます。
実行している環境は

OS Windows XP
Delphi6 Enteprise

です。パッチは全てあてているつもりです。

試しに Delphi2007 で実行したらこちらはちゃんと表示されました。

この件にに関して何かご存じでしたら教えて下さい。

--
中村 隆


Hikaru Fukushi

unread,
Mar 11, 2008, 5:02:52 AM3/11/08
to Del...@ml.users.gr.jp
中村さん、こんばんは。福士と申します。

> Edit2.Text := ExtractFileDir( 'n:\現場2\070703打合せ.xls' );
>
> 期待した「n:\現場2」ではなく「n:\現場」になってしまいます。

Delphi 2007上で各バージョンのExtractFileDir関数を持ってきて
試してみたところ、Delphi5/7/2007のExtractFileDir関数では
問題ありませんが、Delphi6のExtractFileDir関数は確かに正しく
ない結果を返します。

深く突き詰めていないのですが、Delphi6のExtractFileDir関数で

| while (ByteType(FileName, I-1) = mbTrailByte) and (I > 0) do Dec(I);

という行があり、これが1回処理されるのが原因のようです。
ちなみにこのwhile文、Delphi5/7/2007にはありません。

Delphi6の不具合っぽいとは思いますが、確証はありません。
追求不足で申し訳ないのですが、参考にしてください。


+=========+=========+=========+=========+=========+=========+=========+
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp
+=========+=========+=========+=========+=========+=========+=========+

中村 隆

unread,
Mar 11, 2008, 8:09:31 AM3/11/08
to Del...@ml.users.gr.jp
わざわざ検証していただき、ありがとうございました。

> 試してみたところ、Delphi5/7/2007のExtractFileDir関数では
> 問題ありませんが、Delphi6のExtractFileDir関数は確かに正しく
> ない結果を返します。

Delphi7をインストールして、ソースを比較してみました。
おっしゃるように、Delphi7 はシンプルになっていました。

とりあえず、SysUtils.pasを修正して回避しました。
ありがとうございました。

ところで、SysUtils.pas修正後の正しい再コンパイル方法
ご存じの方がいましたら教えて下さい。

単純にコンパイルしたら、元サイズ 115 KBが 149 KBになってしまいました。

> __________ NOD32 2936 (20080311) 情報 __________
>
> このメールはNOD32によって検査済みです。
> http://canon-sol.jp
>

--
中村 隆 <taka...@csjpn.com>


ht_...@nifty.com

unread,
Mar 11, 2008, 8:26:39 AM3/11/08
to Del...@ml.users.gr.jp
こんにちは。
Delphi Q&A 掲示板にも同様なトピックがあります。

[ExtractFileDir(ファイルの親フォルダ名を返す関数) が存在しないフォルダ名を返す]
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200803/08030001.txt

# 当方の環境(Delphi6 Profesional + UPD2 + RTL UPD #2/#3)
# ではこの問題は発生していません。

--
by DEKO
-------------------------------------
http://homepage1.nifty.com/ht_deko/
ht_...@nifty.com
-------------------------------------

中村 隆

unread,
Mar 11, 2008, 7:08:20 PM3/11/08
to Del...@ml.users.gr.jp
情報ありがとうございます。

> Delphi Q&A 掲示板にも同様なトピックがあります。
はじめて知りました。私個人のDelphiリンクに登録します。

なんか personal版はOKのようですね。

> __________ NOD32 2938 (20080311) 情報 __________

Hikaru Fukushi

unread,
Mar 11, 2008, 9:26:14 PM3/11/08
to Del...@ml.users.gr.jp
中村さん、DEKOさん、こんにちは。福士です。

> 実行している環境は
>
> OS Windows XP
> Delphi6 Enteprise
>
> です。パッチは全てあてているつもりです。

Delphi Q & A掲示板のほうでも指摘がありますが、Delphi 6の
アップデート類は全て適用されていますか?Delphi 6には

Delphi 6 アップデート・ダウンロードサービス
http://support.codegear.com/article/35928/

にあるとおり最低でも5本(アップデートファイル#2、アップデート
ファイル#2 追加アップデート、RTLアップデート、RTLアップデート
#2、RTLアップデート #3)のアップデートがあります。


# 全部適用すれば自前でSysUtils.pasを修正する必要はないと
# 思われます。

中村 隆

unread,
Mar 12, 2008, 9:38:42 PM3/12/08
to Del...@ml.users.gr.jp
> # 全部適用すれば自前でSysUtils.pasを修正する必要はないと
> # 思われます。
もう一度Delphiインストール前の段階からパッチを実施してみました。
1.前回はdelphi6update1.exeから実行していましたがこれはSkip
2.delphi6update2.exe、delphi6update2entfix.exe実行..直っている!
3.del6_ent_rtl2_jp.exe実行..元に戻っている (..)
というわけで諸悪の根元は「del6_ent_rtl2_jp.exe」でした

憶測ですが、update2の説明にあるようにupdate2でソース修正が
失敗していたものをベースに「del6_ent_rtl2_jp.exe」を作った
のでは?憶測が正しければ他にも影響が考えられますね。

> __________ NOD32 2942 (20080312) 情報 __________

Reply all
Reply to author
Forward
0 new messages