初歩的なことですが。
TStringlistにファイルのプルパスやURLを保存するとき、ダブルクオーテイションで囲んで保存しないと、誤動作するのは体験しましたが
Listboxではまだ経験していません。
やはり、TListboxでもダブルクオーテイションで囲んで保存すべきでしょうか。
よろしくお願いします。
>誤動作するのは体験しましたが
どのような誤作動ですか?
必要なときStirngList.Strings[i]でパスを取り出すとき
スペースなどが入ったパスの時文字列が途中で切れます。
従ってパスによりファイルを呼び出せないケースがあります。
>>必要なときStirngList.Strings[i]でパスを取り出すとき
>>スペースなどが入ったパスの時文字列が途中で切れます。
この時点で途中で切れているのをちゃんと確認されましたか?
たぶん、この時点では途中では途切れていないと思います。
>>従ってパスによりファイルを呼び出せないケースがあります
が、APIなどでファイル呼び出しにスペースの入ったパスをダブルクオーテションなしで使うと、スペースを引数の区切りと誤認?されるのでファイル呼び出しに失敗するのだと思います。
>>やはり、TListboxでもダブルクオーテイションで囲んで保存すべきでしょうか。
回答ははいになります。
ListBox は StringList と違ってUIですから見た目も重要です。
したがって、文字列はダブルクオーテションなしにすべきです。
そして、それを使うときダブルクオーテションを補充するとよいのでは。
Filename := '"' + ListBox1.Items[i] + '"';
説明不足でした。
通常StringlistにURLやフルパスを格納するときは
str:=AnsiQuotedStr(strURL, '"');
StringList.Add(str);
で格納しています。
取り出して使うときは
P: PChar;
str:string;
begin
str:=StringList.Strings[i];
P := PChar(str);
str := AnsiExtractQuotedStr( P, '"');
Label1.Caption := str;
end;
のようにして使っています。
このパスやURLをListBoxに格納するときも
””で囲って格納して、使うときは””をはずして使うようにする必要が
あるのかどうかということです。
すみません。
なにをしているのか、まったく意味不明です。
>スペースなどが入ったパスの時文字列が途中で切れます。
こういうことはありません。
>必要なときStirngList.Strings[i]でパスを取り出すとき
>スペースなどが入ったパスの時文字列が途中で切れます。
・スペースなどが入ったパスの時 には、必ず切れるのですか?
・もし、特定の文字列の場合には、具体的には、途中で切れる文字列は、何ですか?
(例:c:\Program Files\Windows NT とか)
・取り出すときではなく、格納時に切れているということはありませんか?
CommaTextやDelimitedTextを使って登録すると
スペースも区切り文字として扱われるため、
""で囲んでいないと思わぬ結果になることがあります。
ひょっとしてそれと混同しているのかな?
AddやStrings[]で個別に扱う分にはそんな制限はありませんし、
いちいち""で囲んだり外したりする必要もありません。
みなさん教えていただきありがとうございました。
tttさんの言われるように、CommaTextを使ったときかもしれません。
以前それで苦労したことがありますので。
Stringlistにコンマで区切って複数の項目をくっつけて格納して
取り出すとき、よく、Cmmatextを使いますので、そのときかもしれません。
取り越し苦労でした。
ありがとうございました。
ツイート | ![]() |