C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 長いファイル名と短いファイル名の場合


(過去ログ 14 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■4848 / inTopicNo.1)  長いファイル名と短いファイル名の場合
  
□投稿者/ 美流久 (23回)-(2007/06/27(Wed) 17:07:03)

分類:[.NET 全般] 

こんにちは

VB2005です
substringを使い、パスを分解してから+を使って、ファイルの名前を少し変えています。
  
例)
dim file2_name as string
file2_name = System.IO.Path.GetFileNameWithoutExtension(ListView1.Items(n + 1).Text)


’ファイル名変数
dim str_mon as string
dim str_day  as string
dim str_hour as string

’フォーマット
dim fileformat as string

str_mon=file2_name.substring(4,2)
str_day = file2_name.Substring(9, 2)          *←
str_hour = file2_name.Substring(11, 2)

fileformat=format(str_mon+"月"+str_day+"日"+str_hour+"時")
textbox1.text=fileformat
            #文字と分解したパスを一緒にしました

質問としては、もともと取得したいファイル名(長いファイル名)では取得出来るのに、別のファイル(短いファイル名)を選ぶと「*」のあたりで「インデックスおよび長さは文字列内の場所を参照しなければなりません。」と出ました。
if文でちょこちょこ記述してみたら、もともと取得したいパスが取れなくなり、その変わりに別のファイルが取れるようになってしまいます。

作業がちょっと分からなくなってしまったのでアドバイスよろしくお願いしますorz



引用返信 編集キー/
■4849 / inTopicNo.2)  Re[1]: 長いファイル名と短いファイル名の場合
□投稿者/ ぽぴ王子 (223回)-(2007/06/27(Wed) 17:39:44)
ぽぴ王子 さんの Web サイト
No4848 (美流久 さん) に返信

> 質問としては、もともと取得したいファイル名(長いファイル名)では取得出
> 来るのに、別のファイル(短いファイル名)を選ぶと「*」のあたりで「インデ
> ックスおよび長さは文字列内の場所を参照しなければなりません。」と出
> ました。
(行が長すぎたので整形しました)

「インデックスおよび長さは文字列内の場所を参照しなければなりません」
の時に、ほかに何かメッセージはありませんでしたか?
このメッセージが出るのは、ArgumentOutOfRangeException が発生した
ときだと思います。
まずはそこを【理解】してください。

そのときに、僕が原因を突き止める時の流れを書いてみます。

まず MSDN ライブラリで ArgumentOutOfRangeException について調べ
ます。
http://msdn2.microsoft.com/ja-jp/library/system.argumentoutofrangeexception%28VS.80%29.aspx
> 呼び出されたメソッドで定義されている許容範囲外の値が引数として渡
> された場合にスローされる例外。
と書かれています。
イマイチよく意味がわからないかもしれません。
その場合、エラーそのものではなく原因について調べます。
file2_name.Substring(9, 2)
の部分ですね。
というわけで、またもや MSDN ライブラリで Substring メソッドについて調
査します。
http://msdn2.microsoft.com/ja-jp/library/aka44szs%28VS.80%29.aspx
Substring メソッドの中に ArgumentOutOfRangeException の解説を見つ
けました。
> startIndex と length を足した数が、このインスタンス内にない位置を示し
> ています。
むむむ、これが怪しいですね!

長いファイル名では大丈夫だが、短いファイル名を選ぶとエラーが発生する、
という現象から考えて、この辺が怪しいです。
ソースをみると startIndex が 9、length が 2 を表していますから、9+2=11
が『このインスタンス内』、つまり file2_name にないという意味です。
これはどういうことかというと、file2_name の 9 (0 から始まるので正確に
は 8)文字目から 2 文字取りたいんだけど、ないんだよねーと言われてい
るわけです。
となると原因は、file2_name が 9 文字未満だからなのではないでしょうか。

…ってことをデバッグ時に考えたりしています。
美流久さんが読んでどこまで理解できるかどうかはわかりませんが、こう
いう時の「考え方」は是非身につけるようにしてください。というか身につけ
られないとプログラマとして失格だと思うようにしてください。

> if文でちょこちょこ記述してみたら、もともと取得したいパスが取れなくなり、
> その変わりに別のファイルが取れるようになってしまいます。

原因を突き止める前に、付け焼き刃でこういった作業を行うのは危険です。
絶対にやめてください。
「プログラムは思った通りに動かない。書いた通りに動く」という名言があり
ますが、何をしているのかを理解せずにごちゃごちゃとひっくり返してみて
も、ごちゃごちゃと書いたとおりにしか動きません。その結果が
> その変わりに別のファイルが取れるようになってしまいます。
なんじゃないでしょうか。

今まで何度か美流久さんが質問をされていますが、その度にいろいろと詳
しい説明をしてもらい、その度に美流久さんは理解せずにコピペして「でき
ました☆」とやっていたのではないですか?
もう少し「自分の力でなんとかする」ことをしないと、誰も答えてくれなくなる
んじゃないでしょうか。
ちなみに自分の力でとは訳もわからずただこねくり回して動いているものを
動かなくすることではありません。なぜエラーになるのか、その原因を突き
止める努力をすることです。その上で「ここがわからないのですが」と質問
すれば皆答えてくれると思います。
引用返信 編集キー/
■4851 / inTopicNo.3)  Re[2]: 長いファイル名と短いファイル名の場合
□投稿者/ まどか (310回)-(2007/06/27(Wed) 17:50:57)
考え方として
・長くても短くても動くにはどうすればよいか。
・年月日の位置は固定数字でもいいけど、あるべきところに文字があることは確認したほうがいい。
といったところです。

最初のやつは下記を参考に。
http://dobon.net/vb/dotnet/file/getshortpath.html


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -