指定した階層にテキスト出力するには?

解決


ふわふわ  2005-06-06 00:19:46  No: 122270  IP: [192.*.*.*]

すいません。また手をお借りしたいです。
年度ディレクトリと月度ディレクトリが無ければ作り
月度ディレクトリの中の日にちファイルにListBoxの
内容をテキスト出力したいのですが、以下のコードでは
一番上の階層に拡張子無しの空ファイルが出来てしまいます。
Newの使い方など、理解できてない点があるのは分ってるんですが
なぜこうなるのか、どこを手直しすれば良いのか(コードィングは
自分で何とかしてみます)教えていただけませんか?

編集 削除
ふわふわ  2005-06-06 00:20:10  No: 122271  IP: [192.*.*.*]

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

編集 削除
通ってみた  2005-06-06 01:02:36  No: 122272  IP: [192.*.*.*]

.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でナニヤラ設定しているが、コイツではないの?
明らかにドライブ(フォルダかファイルか)にアクセスしてるが拡張子は見当たらないけど

解決策がもしなければ(あるんだろうが)、できてしまったファイルを削除という手も(あまりよくないけども)

編集 削除
ぶぶ  2005-06-06 09:22:24  No: 122273  IP: [192.*.*.*]

.Netっぽいので、勘というか・・・なんですけど、年度がない時、
作ってそのままif文抜けてしまいますよね。月度を作成にいかないと思うんですが
VB6みたいにシングルステップで確認しながら実行ってできるんでしょうか?
できるなら、流れを追いかけてみるとか・・・
どうも最初の年度のディレクトリ作ってそのままIf文抜けてしまってるのでは・・・って思うのですが・・・
>        Dim fw As New StreamWriter("X:\" & day & hiniti, False, _
>        System.Text.Encoding.GetEncoding(932))
>        fw.Write(ListBox1.Items)
ここなんですが、
>月度ディレクトリの中の日にちファイルにListBoxの
>内容をテキスト出力したいのですが、
月度ディレクトリの指定をしてないような気がするのですが・・

編集 削除
特攻隊長まるるう  2005-06-06 09:55:00  No: 122274  IP: [192.*.*.*]

ヘルプに書いてありますけど、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:\?日"ってファイルが作られるコードに見えます。
ぶぶさんの指摘通り、意味のないコードが多いです。
通ってみたさん指摘通り、ディレクトリの移動は必要ありませんし、
操作とか全く関係ナイっぽい…。もう一度、自分が何してるのか?
ヘルプで調べてきて下さい。

編集 削除
ふわふわ  2005-06-06 20:47:22  No: 122275  IP: [192.*.*.*]

通ってみたさん、ぶぶさん、特攻隊長まるるうさん
ご指摘ありがとうございます。
だいぶすっきりしたコードになりましたが、また問題が・・・

System.IOはwin98はサポート外

開発は2000なので問題ないですが、98で動かす予定なんです。
何か変わりになる方法ないでしょうか?
.Netで98用のものを作るのに制約が多いのなら、言語自体を
変える必要も・・・

編集 削除
ガッ  2005-06-06 21:40:30  No: 122276  IP: [192.*.*.*]

.NET Framework 1.1 SDKドキュメントより抜粋
> オペレーティング システム要件
> .NET Framework は、次のプラットフォームでサポートされています。

> シナリオ オペレーティング システム 
> クライアント Microsoft® Windows® 98  

( ・д⊂ヽ゛<…だいじょぶそうに見えるんだが…
> System.IOはwin98はサポート外
どこにソースありました…?

編集 削除
ふわふわ  2005-06-06 22:35:39  No: 122277  IP: [192.*.*.*]

>どこにソースありました…?
http://www.atmarkit.co.jp/fdotnet/dotnettips/281filewatch/filewatch.html

>  .NET Frameworkのクラス・ライブラリには、ファイルやディレクトリの作成/
>変更/削除を監視するためのFileSystemWatcherクラス(System.IO名前空間)
>が用意されている(ただしWindows 98/Meでは利用できない)。
とあるんですが、大丈夫ならこのまま続けられるのでありがたいのですが・・・

編集 削除
魔界の仮面弁士  2005-06-07 01:19:06  No: 122278  IP: [192.*.*.*]

その文章は、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

編集 削除
魔界の仮面弁士  2005-06-07 01:21:10  No: 122279  IP: [192.*.*.*]

失礼。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

編集 削除
ふわふわ  2005-06-07 17:54:38  No: 122280  IP: [192.*.*.*]

そういう事でしたか。ヘルプをかいつまみながら作っていこうと
思ってましたが、考えが甘かったようですね。
一度、VBの基礎からきっちり時間をかけてやって行こうと思います。
通ってみたさん、ぶぶさん、特攻隊長まるるうさん、ガッさん、
魔界の仮面弁士さん、時間を私のために使っていただきありがとうございました。

編集 削除