すいません。また手をお借りしたいです。
年度ディレクトリと月度ディレクトリが無ければ作り
月度ディレクトリの中の日にちファイルにListBoxの
内容をテキスト出力したいのですが、以下のコードでは
一番上の階層に拡張子無しの空ファイルが出来てしまいます。
Newの使い方など、理解できてない点があるのは分ってるんですが
なぜこうなるのか、どこを手直しすれば良いのか(コードィングは
自分で何とかしてみます)教えていただけませんか?
Dim year As String
Dim month As Integer
Dim day As Integer
Dim datenow As DateTime = DateTime.Now
Dim fyear, fmonth, fday As String
Dim nendo, tuki, hiniti As String
year = datenow.Year
month = datenow.Month
day = datenow.Day
nendo = "年度"
tuki = "月"
hiniti = "日"
If System.IO.Directory.Exists("X:\" & year & nendo) = False Then '年度ディレクトリが無いなら
System.IO.Directory.CreateDirectory("X:\" & year & nendo) '年度ディレクトリを作成
ElseIf System.IO.Directory.Exists("X:\" & year & nendo) = True Then '年度ディレクトリがあるなら
System.IO.Directory.SetCurrentDirectory("X:\" & year & nendo) '年度ディレクトリに移動
If System.IO.Directory.Exists(month & tuki) = False Then '月度ディレクトリが無いなら
System.IO.Directory.CreateDirectory(month & tuki) '月度ディレクトリを作成
ElseIf System.IO.Directory.Exists(month & tuki) = True Then '月度ディレクトリがあるなら
System.IO.Directory.SetCurrentDirectory(month & tuki) '月度ディレクトリに移動
If System.IO.File.Exists(day & hiniti) = False Then '日にちファイルが無いなら
System.IO.File.CreateText(day & hiniti & ".txt") '日にちファイルを空で作成
FileClose()
End If
End If
End If
System.IO.Directory.SetCurrentDirectory("x:\" & year & nendo & month & tuki)
Dim fw As New StreamWriter("X:\" & day & hiniti, False, _
System.Text.Encoding.GetEncoding(932))
fw.Write(ListBox1.Items)
FileClose()
End Sub
.Netっぽいので考え方が違うかもしれないが「○○ディレクトリに移動」という処理は必要?
下の階層を調べる時に、上の階層のディレクトリ名を足した方がいいのでは
そうすれば最終的には必ず一番下の階層に辿り着くけども、もしかしたら移動の時点でおかしくなっているのかもしれない
If aaというディレクトリがあるか? = False then
aaというディレクトリ作成
End If
If \aa\にbbというディレクトリがあるか? = False then
\aa\にbbというディレクトリ作成
End If
If \aa\bb\にccというディレクトリがあるか? = False then
\aa\bb\にccというディレクトリ作成
End If
If \aa\bb\cc\にabc.txtというファイルがあるか? = False then
\aa\bb\cc\にabc.txtというファイルを作成
End If
で、本題の方。
Dimでナニヤラ設定しているが、コイツではないの?
明らかにドライブ(フォルダかファイルか)にアクセスしてるが拡張子は見当たらないけど
解決策がもしなければ(あるんだろうが)、できてしまったファイルを削除という手も(あまりよくないけども)
.Netっぽいので、勘というか・・・なんですけど、年度がない時、
作ってそのままif文抜けてしまいますよね。月度を作成にいかないと思うんですが
VB6みたいにシングルステップで確認しながら実行ってできるんでしょうか?
できるなら、流れを追いかけてみるとか・・・
どうも最初の年度のディレクトリ作ってそのままIf文抜けてしまってるのでは・・・って思うのですが・・・
> Dim fw As New StreamWriter("X:\" & day & hiniti, False, _
> System.Text.Encoding.GetEncoding(932))
> fw.Write(ListBox1.Items)
ここなんですが、
>月度ディレクトリの中の日にちファイルにListBoxの
>内容をテキスト出力したいのですが、
月度ディレクトリの指定をしてないような気がするのですが・・
ヘルプに書いてありますけど、StreamWriter コンストラクタは
ファイルが存在しない場合に自分で作成しちゃいます。
…それだけの事のようですが?(^^;)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemiostreamwriterclassctortopic2.asp
> Dim fw As New StreamWriter("X:\" & day & hiniti, False, _
> System.Text.Encoding.GetEncoding(932))
If 文とか全く関係無く、"X:\?日"ってファイルが作られるコードに見えます。
ぶぶさんの指摘通り、意味のないコードが多いです。
通ってみたさん指摘通り、ディレクトリの移動は必要ありませんし、
操作とか全く関係ナイっぽい…。もう一度、自分が何してるのか?
ヘルプで調べてきて下さい。
通ってみたさん、ぶぶさん、特攻隊長まるるうさん
ご指摘ありがとうございます。
だいぶすっきりしたコードになりましたが、また問題が・・・
System.IOはwin98はサポート外
開発は2000なので問題ないですが、98で動かす予定なんです。
何か変わりになる方法ないでしょうか?
.Netで98用のものを作るのに制約が多いのなら、言語自体を
変える必要も・・・
.NET Framework 1.1 SDKドキュメントより抜粋
> オペレーティング システム要件
> .NET Framework は、次のプラットフォームでサポートされています。
>
> シナリオ オペレーティング システム
> クライアント Microsoft® Windows® 98
( ・д⊂ヽ゛<…だいじょぶそうに見えるんだが…
> System.IOはwin98はサポート外
どこにソースありました…?
>どこにソースありました…?
http://www.atmarkit.co.jp/fdotnet/dotnettips/281filewatch/filewatch.html
に
> .NET Frameworkのクラス・ライブラリには、ファイルやディレクトリの作成/
>変更/削除を監視するためのFileSystemWatcherクラス(System.IO名前空間)
>が用意されている(ただしWindows 98/Meでは利用できない)。
とあるんですが、大丈夫ならこのまま続けられるのでありがたいのですが・・・
その文章は、Win98で System.IO 名前空間すべてが使用不可、と
いっているわけではありませんよ。
System.IO.FileSystemWatcher は、Win98でサポートされていませんが、
System.IO.StreamWriter は、Win98でサポートされています。
ヘルプには、それぞれのクラスが、どのOSでサポートされているかが
書かれています。Win98系もターゲットに開発するのであれば、
個々のクラスのサポート状況を、併せて調べてみてください。
[System.IO.FileSystemWatcher クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemiofilesystemwatcherclasstopic.asp
》Windows NT Server 4.0
》Windows NT Workstation 4.0
》Windows 2000
》Windows XP Home Edition
》Windows XP Professional,
》Windows Server 2003 ファミリ
[System.IO.StringWriter クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemIOStringWriterClassTopic.asp
》Windows 98
》Windows NT 4.0
》Windows Millennium Edition
》Windows 2000
》Windows XP Home Edition
》Windows XP Professional
》Windows Server 2003 ファミリ
》.NET Compact Framework - Windows CE .NET
失礼。StreamWriterはこちらでした。
[System.IO.StreamWriter クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemIOStreamWriterClassTopic.asp
》Windows 98
》Windows NT 4.0
》Windows Millennium Edition
》Windows 2000
》Windows XP Home Edition
》Windows XP Professional
》Windows Server 2003 ファミリ
》.NET Compact Framework - Windows CE .NET
そういう事でしたか。ヘルプをかいつまみながら作っていこうと
思ってましたが、考えが甘かったようですね。
一度、VBの基礎からきっちり時間をかけてやって行こうと思います。
通ってみたさん、ぶぶさん、特攻隊長まるるうさん、ガッさん、
魔界の仮面弁士さん、時間を私のために使っていただきありがとうございました。