◀一般トップへ
  • 2111 「外部コマンド実行」の [ファイル参照]
    • 2112 Re: 「外部コマンド実行」の [ファイル参照]
      • 2115 Re2: 「外部コマンド実行」の [ファイル参照]
        • 2125 Re3: 「外部コマンド実行」の [ファイル参照]
          • 2127 Re4: 「外部コマンド実行」の [ファイル参照]
            • 2129 Re5: 「外部コマンド実行」の [ファイル参照]
  • [2111] 「外部コマンド実行」の [ファイル参照] すい 2002年07月12日 22:44

    [ツール(T)] → [外部コマンド実行(X)]
    でファイル参照のボタン(右端の [...] ボタン)が出なくなることがあります。
    具体的にはエラーダイアログが出ます。
    +------------------------------
    |sakura
    |ダイアログが開けません。
    |
    |エラー:FNERR_INVALIDFILENAME
    |    [ OK ]
    +------------------------------

    最後に実行したコマンド(コマンドの実行履歴)によってエラーが出たり出なかったりします。
    ×:dir/b/s
    ×:dir/b
    ○:dir
    ×:C:\WINDOWS\COMMAND\Attrib.exe /s
    ×:C:\WINDOWS\COMMAND\Attrib.exe c:\*.*
    ×:attrib /s
    ○:C:\WINDOWS\COMMAND\Attrib.exe
    ○:attrib
    ×:"C:\Program Files\SAKURA\Diff.exe" "C:\Program Files\SAKURA\hoge.pl" "C:\Program Files\SAKURA\hoge2.pl"
    ○:C:\Program Files\SAKURA\Diff.exe
    ×:dir c:
    ×:dir *.*

    ○:正常に「ファイルを開く」が出る。
    ×:エラーダイアログが出る。

    最後に実行したコマンドに何かオプションパラメータが付いている場合にダメ?

    で、CDlgOpenFile.cpp の CDlgOpenFile::Create() 中で文字列を単純に
    「_splitpath に投げて szDrive と szDir を結合するだけ」の辺りが原因?かな?と推測したんですが。
    例えば dir/b/s なんかを _splitpath に投げると
    ・Drive:""
    ・Dir :"dir/b/"
    になってしまう(と思う)ので m_szInitialDir = "dir/b/" になってしまったりする(と思う)のがまずいかな?と。
    # 確認できないので、実際には原因、違うかもしれません。

    ただ、もしそうだとすると、
    「 Drive が空の場合は m_szInitialDir に文字列を代入しない」である程度解決するかな?と思ったけど、
    C:\WINDOWS\COMMAND\Attrib.exe c:\*.* なんかの場合は
     ・Drive:"C:"
     ・Dir :"\WINDOWS\COMMAND\Attrib.exe c:\"
    となるだろうから問題回避できなさそうだし。
    さらに、逆に \\computer0\name1\dir2\file3 なんかの場合は
     ・Drive:""
     ・Dir :"\\computer0\name1\dir2\"
    だからデフォルトで開いてくれなくなりそうだし。

    そもそも _splitpath って“正常なパス文字列”以外の文字列が来た場合の挙動って
    コンパイラ(のライブラリ)によって異なるから、ちょっと恐いんですよね。
    「オプションパラメータとの分離」/「本当にパス文字列なのかどうかの判別」
    をちゃんと真面目にやる「 _splitpath 代替関数」を自作しないと解決しそうにないです。

    もし、本当にこれが原因だったら、_splitpath 関数、私が自作してみませうか?
    # 私に任せておくと時間かかると思いますけど。
    もっとも、その前に私には原因が特定できないので...
    • [2112] Re: 「外部コマンド実行」の [ファイル参照] げんた 2002年07月13日 00:32

      >[ツール(T)] → [外部コマンド実行(X)]
      >でファイル参照のボタン(右端の [...] ボタン)が出なくなることがあります。
      詳細どうもです.
      これは以前に報告があって,そのときにパスの解析にパラメータまで渡しておかしくなるというところまでは調べたんですが,それっきり忘れて放置してました.

      >もし、本当にこれが原因だったら、_splitpath 関数、私が自作してみませうか?
      ># 私に任せておくと時間かかると思いますけど。
      まぁ気長に待つとしましょう.
      • [2115] Re2: 「外部コマンド実行」の [ファイル参照] すい 2002年07月15日 20:15

        >>もし、本当にこれが原因だったら、_splitpath 関数、私が自作してみませうか?
        >># 私に任せておくと時間かかると思いますけど。
        >まぁ気長に待つとしましょう.

        作ってみました。こんな感じ。
        http://www.egroups.co.jp/files/sakura-editor/Developer/Source/my_sp.lzh

        my_splitpath( CommandLine, drive, dir, fname, ext );

        _splitpath() と互換(のつもり)の関数です。
        CommandLine に与えられたコマンドライン文字列の先頭から、実在する
        ファイル・ディレクトリの部分のみを抽出し、その抽出部分に対して
        _splitpath() と同等の処理をおこないます。
        # ↑実際にディスクにアクセスして実在のファイル・ディレクトリを探すので、
        # 単なる文字列処理だけの _splitpath() よりも遅くなります。

        先頭部分に実在するファイル・ディレクトリ名が無い場合は空文字列が
        返ります。
        文字列中の日本語(Shift_JISコードのみ)に対応しています。

        my_sp.c:my_splitpath(); が記述されているファイル
        test.c :↑の動作確認用テストプログラム main();

        結構長い物になってしまいました。が、半分くらい注釈だったりして(をぃ>私)

        適当なファイルにコピーペーストするなり何なりしてリンクするようにして、
        _splitpath を my_splitpath に置き換えてみてください。
        • [2125] Re3: 「外部コマンド実行」の [ファイル参照] げんた 2002年07月23日 01:19

          >作ってみました。こんな感じ。

          > _dos_setvect(0x24,int24h); /* 割込みベクタ復活 */
          めっちゃ久しぶりに見ました.自分では使ったこと無いな~.

          >#ifdef LSI_C /* LSI-C の場合。 */
          >void far _asm_void_( char * );
          >void far int_nop(){ _asm_void_( "IRET\n" ); }
          >#endif /* LSI_C */
          こっ,こんな技が... DOS時代は凄かった...

          別ファイルにコピペしようかとかDOS部分を削除しようかとか考えましたが,下手に削除するとコメントとつじつま合わなくなっちゃうのでファイルさら使うことにします.

          # えーと,C関数のリンク方法は...(._.) φ メモメモ
          • [2127] Re4: 「外部コマンド実行」の [ファイル参照] すい 2002年07月23日 21:38

            >下手に削除するとコメントとつじつま合わなくなっちゃうので
            コメント、全部削除して頂いて構いませんよ。 (;*^_^*A
            # ソース近辺のまで全部消したら何処で何やっているかわからなくなるかもしれませんが。 :-D
            著作権や何かは一切放棄させていただきます。改変等もご自由に、という事で。

            いえ、モロ C のソースファイルを C++ と一緒くたにしちゃって、何か管理上とか、
            他のファイルとの雰囲気(?)上、変な事にならなければ良いのですが。。。と思いまして。 f(^^;


            # 今、エディタのフォント設定を Y.OzFont 太文字(Y.OzFontB) にして
            # 何とも言えぬいい雰囲気に浸ってます。:-D  http://users.hoops.ne.jp/yozk/
            • [2129] Re5: 「外部コマンド実行」の [ファイル参照] げんた 2002年07月24日 00:22

              >著作権や何かは一切放棄させていただきます。改変等もご自由に、という事で。
              著作権表示は追加しましたけど,ライセンスは書き込んでいません.

              >いえ、モロ C のソースファイルを C++ と一緒くたにしちゃって、何か管理上とか、
              makeファイルに.c.objを追加しました.
              あと,Global名前空間を表す::はCではコンパイルエラーになったので取り除きました.

              ># 今、エディタのフォント設定を Y.OzFont 太文字(Y.OzFontB) にして
              みかちゃんフォントといい手書きフォントは何となくほのぼのしますね