早速ですが、次のソースを実行すると
Edit2.Text := ExtractFileDir( 'n:\現場2\070703打合せ.xls' );
期待した「n:\現場2」ではなく「n:\現場」になってしまいます。
実行している環境は
OS Windows XP
Delphi6 Enteprise
です。パッチは全てあてているつもりです。
試しに Delphi2007 で実行したらこちらはちゃんと表示されました。
この件にに関して何かご存じでしたら教えて下さい。
--
中村 隆
> 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
+=========+=========+=========+=========+=========+=========+=========+
> 試してみたところ、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>
[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
-------------------------------------
> Delphi Q&A 掲示板にも同様なトピックがあります。
はじめて知りました。私個人のDelphiリンクに登録します。
なんか personal版はOKのようですね。
> __________ NOD32 2938 (20080311) 情報 __________
> 実行している環境は
>
> 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を修正する必要はないと
# 思われます。
憶測ですが、update2の説明にあるようにupdate2でソース修正が
失敗していたものをベースに「del6_ent_rtl2_jp.exe」を作った
のでは?憶測が正しければ他にも影響が考えられますね。
> __________ NOD32 2942 (20080312) 情報 __________