「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@18) [中] [感謝]
@18■ (#42) ファイル名長さについて - ooku (2008-09-10 11:31) /緊急 未処理
【症状】ファイル名のみが全角文字118文字以上で認識しなくなる。
【再現方法】ファイル名を118文字以上にしてなでしこで読み込もうとする。
【要望】window(XP-Pro)の仕様と同じにしてもらいたい。
【バージョン】なでしこ PRO v1.505
【その他】

半角でのファイル名はドライブ+フォルダ+ファイル名+拡張子名
の238文字(byte)にて普通通り認識してくれるのですが全角文字になると話が変わりファイル名のみが全角文字117文字までは認識できるが118文字で認識しなくなります。
ところがwindows XP-Pro側ではバイト数は関係なく230文字までのドライブ+フォルダ+ファイル名+拡張子名で認識できます。
なでしこでもwindowsと同じ仕様に変更願いお願いします。

(#43) 詳細希望 - クジラ飛行机 (2008-09-10 14:05) /緊急 未処理
すみません。
どういうプログラムを書くと、ファイル名を認識しなくなるのでしょうか。
なでしこの内部では、Windows標準の命令を使っていますので、
ファイル名を認識しないことはないと思います。

詳細をお願いします。

(#46) 詳細 - ooku (2008-09-11 14:16) /緊急 未処理
#//ファイル列挙 ファイル名変更
#-----------------------------------------ここから
名とは文字列。
拡張名とは文字列。
元名とは文字列。
(対象フォルダ&『*.*』)のファイル列挙。
それを反復
  元名は「{対象}」。
  拡張名は元名から拡張子抽出。
  名は元名の「{拡張名}」を「{""}」に置換。
#-----------------------------------------ここまで
この使い方の時ファイル名が全角118文字以上だと読み込まれない。




(#47) ファイル列挙の文字バッファが256bytes? - SWinX (2008-09-11 16:07) /緊急 未処理
ファイルシステムやOSにも依存するかもしれませんね。
こちらでは全角128文字でファイル列挙の結果から消えました。
NTFS WinXP SP3です。

//検証プログラム:デスクトップに非常識に長いファイル名のファイルを作ります
Iで125から130まで繰り返す
 「{I}文字の場合」を表示
 「あ」をIだけリフレイン
 保存名=「{デスクトップ}{それ}.txt」
 "test"を保存名へ保存
 デスクトップのファイル列挙して言う
 保存名をファイル完全削除

(#50) RE:ファイル列挙の文字バッファが256bytes? - ooku (2008-09-11 19:11) /緊急 未処理
先日の非礼お詫びします。
118文字というのが中途半端と思いましたがもしかすると私の数え間違いかもしれませんね
128ならば2進数としてぴったり合いますね。
プログラム組まずに10文字づつ増やして結果を見たのでSWinXさんの考察どうりでは無いでしょうか。
ntfs winXP-Pro 64bit環境ですが以前の32bit環境でも同じでしたね

(#51) フルパスでの文字数 - 粗茶 (2008-09-11 20:07) /緊急 未処理
私も検証してみました。

ファイルを作成できるのは、パスを含めて259文字でした。
また、ファイル列挙で取得できるのは、パスを含めて172文字でした。
そして作成したファイル(TXT)をTeraPadで正しく開くことが
できたのは、パスを含めて149文字まででした。

私のデスクトップのパスは45文字(すべて半角英数字)
作成したファイル名はすべて全角+拡張子(半角4文字)

デスクトップのパスは個人によって文字数が
違いますので、フルパスの文字数で多少誤差が
あるのかもしれません。

私の環境はXPproSP3です。
なでしこで扱える文字数が259文字になったとしても
アプリケーションによっては対応していないものが
あるかもですね。

見当違いならばごめんなさい。

memoとはメモ
そのレイアウトは全体
固定文字数はデスクトップの文字数
'最大文字数は259 # ファイルは作成できる。
'最大文字数は172 # ファイル列挙できる。
最大文字数は149 # TeraPadでも開くことができる。
ファイル文字数は最大文字数-固定文字数-4 # 拡張子4文字
ファイル名は「」
(ファイル文字数)回
  ファイル名はファイル名&「あ」
ファイル名はデスクトップ&ファイル名&「.txt」
「サンプルファイル」をファイル名へ保存。
memoはmemo&「最大文字数={最大文字数}{~}」
memoはmemo&「ファイル文字数={ファイル文字数}{~}」
memoはmemo&「ファイル名={ファイル名}{~}」
ファイル名を開いて言う。 # 259文字でもOKだった
名とは文字列。
拡張名とは文字列。
元名とは文字列。
(デスクトップ&『*.*』)のファイル列挙。
それを反復
  元名は「{対象}」。
  拡張名は元名から拡張子抽出。
  名は元名の「{拡張名}」を「{""}」に置換。
  memoはmemo&元名&改行&拡張名&改行&名&改行

(#67) 一旦重要度下げます - クジラ飛行机 (2008-09-26 02:35) /中 調査中
すみません。いずれ直したいのですが、
それほど、緊急ではなさそうなので、一旦重要度下げます。

(#86) Windows98時代の制約 - クジラ飛行机 (2008-10-31 12:28) /低 修正中
MSDNをあたると、Windows98時代の制約で、
互換性の問題のため現在もこの問題を抱えています。

Windows2000以降なら、ユニコード系の命令にリンクするように
工夫して対処する。
(一度優先度を下げます)

(#2055) この問題は未解決ですか? - masahal (2012-11-04 12:55) /中 詳細求む!
現在このスレッドと同じ問題に遭遇しているのですが、まだ解決策は
見つかってないんでしょうか?

バージョン:1.53352
最終更新日:2012/07/14
OS   :Windows 7 [6.1(7601:2)] Home Premium Service Pack1 64bit

(#2056) 詳細と言われましても・・・ - ooku (2012-11-10 04:08) /中 重複
単純に
E:\【TV】(録画)\動物・昆虫・植物\【TV】プレミアム8(自然)ワイルドライフ\【TV】プレミアム8(自然)ワイルドライフ[アフリカ\【TV】プレミアム8(自然)ワイルドライフ[アフリカ 大サバンナ\【TV】プレミアム8(自然)ワイルドライフ[アフリカ 大サバンナ 飛ばない鳥 大地を生きる](2011.08.15)([NHK]BShi:19h57m-059)[《HDTV》].mpg
のように階層管理しているのだが
E:\【TV】(録画)\動物・昆虫・植物\【TV】プレミアム8(自然)ワイルドライフ\[アフリカ\[アフリカ 大サバンナ\【TV】プレミアム8(自然)ワイルドライフ[アフリカ 大サバンナ 飛ばない鳥 大地を生きる](2011.08.15)([NHK]BShi:19h57m-059)[《HDTV》].mpg
ように無理に縮めて管理しているのでできればwindowsXPの認識と同じバッファを確保してほしいだけです。(230文字まで全角文字として460byte安全見れば512byteですかね)実際のOSの規定わからないので正確な数字は出せませんがあしからず


(#2059) 以下の方法で解決できました - masahal (2012-11-11 13:46) /中 アイデア
とりあえず自分の環境ではコマンドライン実行を利用する方法で
解決できました

参考URL
なでしこライブラリ~ - ●コマンドライン実行 
http://www26.atwiki.jp/isoroku_be/pages/127.html

@IT:Windows TIPS -- Tips:dirコマンドでファイル名の一覧を取得する 
http://www.atmarkit.co.jp/fwin2k/win2ktips/505flists/flists.html

//------------------------------------

//通常
「F:\」のファイル列挙して言う
//コマンドライン実行を用いる方法
「F:\」のWindowsファイル列挙して言う
「F:\」の全Windowsファイル列挙して言う
「F:\」のWindowsフォルダ列挙して言う


●Windowsファイル列挙(Sの|Sを|Sで)
  「dir {S} /b/a-d」のコマンドライン実行して戻る。

●全Windowsファイル列挙(Sの|Sを|Sで)
  「dir {S} /b/a-d/s」のコマンドライン実行して戻る。

●Windowsフォルダ列挙(Sの|Sを|Sで)
  「dir {S} /b/ad」のコマンドライン実行して戻る。


#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
●コマンドライン実行(Sの|Sを)
  DATA=「{COMSPEC} /c {S}」をコマンド実行。
  DATAを空行削除して戻る。
  
●空行削除(Sの|Sを)
  それ=S。S=空。反復、もし、対象≠空ならば、対象をSに配列追加。
  Sで戻る。
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------

(#2065) ありがとうございます - ooku (2012-11-14 16:16) /中 感謝
このやり方の応用でリネームや他のEXE起動なども出来るようになるのかな
やってみます。
masahalさんありがとうございます。

(#42)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能