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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.52195 の関連記事表示

<< 0 >>
■52195  特定のファイルの移動について
□投稿者/ mix -(2010/08/03(Tue) 08:06:23)

    分類:[C#] 

    一定のフォルダ以下で指定した文字列をファイル名に含まないファイル全てを他のフォルダへ移動するにはどうすればいいのでしょうか。
親記事 /過去ログ88より / 関連記事表示
削除チェック/

■52196  Re[1]: 特定のファイルの移動について
□投稿者/ chobi -(2010/08/03(Tue) 08:22:19)
    No52195 (mix さん) に返信
    > 一定のフォルダ以下で指定した文字列をファイル名に含まないファイル全てを他のフォルダへ移動するにはどうすればいいのでしょうか。
    >

    実行しなければいけない事を分けて、少しずつ前に進みましょう。

    (1)フォルダ内のファイル名を取得する。
    (2)取得したファイル名に指定した文字列が含まれないか調べる
    (3)文字列が含まれないファイルを他のフォルダへ移動する。

    どこまでやりましたか?
    どこが分からなかったですか?
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52213  Re[2]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/03(Tue) 19:07:14)
    No52196 (chobi さん) に返信
    > ■No52195 (mix さん) に返信
    >>一定のフォルダ以下で指定した文字列をファイル名に含まないファイル全てを他のフォルダへ移動するにはどうすればいいのでしょうか。
    >>
    >
    > 実行しなければいけない事を分けて、少しずつ前に進みましょう。
    >
    > (1)フォルダ内のファイル名を取得する。
    > (2)取得したファイル名に指定した文字列が含まれないか調べる
    > (3)文字列が含まれないファイルを他のフォルダへ移動する。
    >
    > どこまでやりましたか?
    > どこが分からなかったですか?
    ご返信ありがとうございます。

    http://dobon.net/vb/dotnet/file/getfiles.html
    http://dobon.net/vb/dotnet/file/searchtextinfiles.html
    1,2に該当するこのあたりを参考にしてみましたが、理解には及びませんでした。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52222  Re[3]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/03(Tue) 20:33:52)
    No52213 (mix さん) に返信
    >>(1)フォルダ内のファイル名を取得する。
    >>(2)取得したファイル名に指定した文字列が含まれないか調べる
    >>(3)文字列が含まれないファイルを他のフォルダへ移動する。
    >>
    >>どこまでやりましたか?
    >>どこが分からなかったですか?
    > ご返信ありがとうございます。
    >
    > http://dobon.net/vb/dotnet/file/getfiles.html
    > http://dobon.net/vb/dotnet/file/searchtextinfiles.html
    > 1,2に該当するこのあたりを参考にしてみましたが、理解には及びませんでした。

    では、まず1からできるようにしていきませんか?
    お使いの開発環境は何ですか?
    2005 以降なら、
    http://dobon.net/vb/dotnet/file/getfiles.html のページに記載されている
    [.NET Framework 2.0以降]のところを参考にやってみればいいでしょう。

    //【あるフォルダ】以下のファイルをすべて取得
    string[] files = System.IO.Directory.GetFiles(【あるフォルダ】, "*", System.IO.SearchOption.AllDirectories);

    こうすると、string型配列filesの中にファイル名が入っています。
    string型とか配列とかはわかりますか?
    わからなければまた調査、質問してください。

記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52223  Re[4]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/03(Tue) 20:38:53)
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52231  Re[4]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 09:18:55)
    No52222 (ごう さん) に返信
    > ■No52213 (mix さん) に返信
    > >>(1)フォルダ内のファイル名を取得する。
    > >>(2)取得したファイル名に指定した文字列が含まれないか調べる
    > >>(3)文字列が含まれないファイルを他のフォルダへ移動する。
    > >>
    > >>どこまでやりましたか?
    > >>どこが分からなかったですか?
    >>ご返信ありがとうございます。
    >>
    >>http://dobon.net/vb/dotnet/file/getfiles.html
    >>http://dobon.net/vb/dotnet/file/searchtextinfiles.html
    >>1,2に該当するこのあたりを参考にしてみましたが、理解には及びませんでした。
    >
    > では、まず1からできるようにしていきませんか?
    > お使いの開発環境は何ですか?
    > 2005 以降なら、
    > http://dobon.net/vb/dotnet/file/getfiles.html のページに記載されている
    > [.NET Framework 2.0以降]のところを参考にやってみればいいでしょう。
    >
    > //【あるフォルダ】以下のファイルをすべて取得
    > string[] files = System.IO.Directory.GetFiles(【あるフォルダ】, "*", System.IO.SearchOption.AllDirectories);
    >
    > こうすると、string型配列filesの中にファイル名が入っています。
    > string型とか配列とかはわかりますか?
    > わからなければまた調査、質問してください。

    ありがとうございます。
    配列をテキストボックスに表示するにはどのようにすればいいのでしょうか。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52233  Re[5]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 09:50:41)
    No52231 (mix さん) に返信

    >>//【あるフォルダ】以下のファイルをすべて取得
    >>string[] files = System.IO.Directory.GetFiles(【あるフォルダ】, "*", System.IO.SearchOption.AllDirectories);
    >>
    >>こうすると、string型配列filesの中にファイル名が入っています。
    >>string型とか配列とかはわかりますか?
    >>わからなければまた調査、質問してください。
    >
    > ありがとうございます。
    > 配列をテキストボックスに表示するにはどのようにすればいいのでしょうか。

    まず、こちらから質問です。
    テキストボックスに普通の文字列を表示する方法はわかりますか?

    string strTest = "てすと"
    textBox1.Text = strTest;

    配列の場合は
    files[0]
    files[1]
    files[2]

     ・
     ・
    files[x] という感じでデータが入っています。

    配列一つづつに、一つづつファイル名が入っています。

    どんな感じでテキストボックスに表示させたいのかわかりませんが、
    一つのテキストボックスに、カンマ区切りでファイル名を表示させたいのですか?
    それとも、テキストボックスが複数あって、それぞれにファイル名を表示させたいのですか?



記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52235  Re[6]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 10:13:28)
    No52233 (ごう さん) に返信
    > ■No52231 (mix さん) に返信
    >
    > >>//【あるフォルダ】以下のファイルをすべて取得
    > >>string[] files = System.IO.Directory.GetFiles(【あるフォルダ】, "*", System.IO.SearchOption.AllDirectories);
    > >>
    > >>こうすると、string型配列filesの中にファイル名が入っています。
    > >>string型とか配列とかはわかりますか?
    > >>わからなければまた調査、質問してください。
    >>
    >>ありがとうございます。
    >>配列をテキストボックスに表示するにはどのようにすればいいのでしょうか。
    >
    > まず、こちらから質問です。
    > テキストボックスに普通の文字列を表示する方法はわかりますか?
    >
    > string strTest = "てすと"
    > textBox1.Text = strTest;
    >
    > 配列の場合は
    > files[0]
    > files[1]
    > files[2]
    > ・
    >  ・
    >  ・
    > files[x] という感じでデータが入っています。
    >
    > 配列一つづつに、一つづつファイル名が入っています。
    >
    > どんな感じでテキストボックスに表示させたいのかわかりませんが、
    > 一つのテキストボックスに、カンマ区切りでファイル名を表示させたいのですか?
    > それとも、テキストボックスが複数あって、それぞれにファイル名を表示させたいのですか?

    はい、普通に表示する方法も配列の[x]も分かっています。
    私が希望する表示方法はひとつのテキストボックスにカンマ区切り 又は 改行で連続表示させたいのですが
    [x]を毎回指定しなければならないのでしょうか?
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52237  Re[7]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 10:15:32)
    2010/08/04(Wed) 10:29:42 編集(投稿者)
    2010/08/04(Wed) 10:19:31 編集(投稿者)

    No52235 (mix さん) に返信

    > はい、普通に表示する方法も配列の[x]も分かっています。
    了解しました。

    > 私が希望する表示方法はひとつのテキストボックスにカンマ区切り 又は 改行で連続表示させたいのですが
    > [x]を毎回指定しなければならないのでしょうか?
    forループを使って、配列の個数分ひとつづつを一つの文字列に連結してやると言う方法が簡単だと思います。
    連結の際に、カンマ、または改行を入れていきます。


    改行区切りで、テキストボックス(textBox1)に表示する例です。
    コンマ区切りなら、"\r\n"を","に置き換えればできます。

    【あらかじめやっておくこと】
    textBox1のプロパティはMultiline = Trueに設定されていること
    using System.IO; を宣言してあること


    【例】
    string[] strFiles = System.IO.Directory.GetFiles("C:\\Documents and Settings\\All Users\\Documents\\My Music\\Sample Music",
     "*", System.IO.SearchOption.AllDirectories);

    // ファイル名を改行記号で連結させる
    string strTmp = "";

    for(int i=0; i<strFiles.Length; i++)
    {
    //strTmp += strFiles[i] + "\r\n"; // ←「フルパス」で表示するならこちら
    strTmp += Path.GetFileName(strFiles[i]) + "\r\n"; // ←「ファイル名.拡張子」のみ表示できればいいならこちら
    }

    // textBox1に表示
    textBox1.Text = strTmp;


    スルーされてしまったので、再度質問です。
    お使いの開発環境のバージョンは、2005以降でいいですね?
    (できる処理と出来ない処理があるため。この例は2005以降なら使えます。)

    -----------

    追記: ソースコード1箇所間違えたので訂正しておきました。ごめんねー
    あと、バージョンについては了解しました。

記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52238  Re[8]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 10:19:04)
    No52237 (ごう さん) に返信
    > スルーされてしまったので、再度質問です。
    > お使いの開発環境のバージョンは、2005以降でいいですね?
    > (できる処理と出来ない処理があるため。この例は2005以降なら使えます。)

    ご丁寧な返信ありがとうございます。
    スルーについては申し訳ない…。
    VS 2010 Proを利用しています。
    ごうさんに教えていただいた内容を元に試してみます。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52239  Re[8]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 10:29:23)
    No52237 (ごう さん) に返信

    > for(int i=0; i<files.Length; i++)

    ここのfilesは何を示してるのですか?
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52241  Re[9]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 10:31:39)
    No52239 (mix さん) に返信
    > ■No52237 (ごう さん) に返信
    >
    >>for(int i=0; i<files.Length; i++)
    >
    > ここのfilesは何を示してるのですか?

    すいません自己解決しました…。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52240  Re[9]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 10:31:04)
    No52239 (mix さん) に返信

    >>for(int i=0; i<files.Length; i++)
    >
    > ここのfilesは何を示してるのですか?

    まちがえました、files → strFilesに直してください。
    strFiles.Lengthで配列の個数を取得できます。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52242  Re[10]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 10:47:35)
    No52240 (ごう さん) に返信
    > まちがえました、files → strFilesに直してください。
    > strFiles.Lengthで配列の個数を取得できます。

    レスにすれ違いがあったようですね…確認不足でした、申し訳ありません。
    テキストボックス云々とは別で、本来の目的である
    (2)取得したファイル名に指定した文字列が含まれないか調べる
    (3)文字列が含まれないファイルを他のフォルダへ移動する
    へ移ろうと思って
    http://www.atmarkit.co.jp/fdotnet/dotnettips/411contains/contains.html
    を参照してみたのですが
    >指定した(複数の)文字列をファイル名に含まないファイル
    と考えたときにどのように応用を効かせればいいのか分かりません。
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52243  Re[11]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 10:55:47)
    No52242 (mix さん) に返信

    > テキストボックス云々とは別で、本来の目的である
    > (2)取得したファイル名に指定した文字列が含まれないか調べる
    > (3)文字列が含まれないファイルを他のフォルダへ移動する
    > へ移ろうと思って
    > http://www.atmarkit.co.jp/fdotnet/dotnettips/411contains/contains.html
    > を参照してみたのですが
    > >指定した(複数の)文字列をファイル名に含まないファイル
    > と考えたときにどのように応用を効かせればいいのか分かりません。

    えっ「指定した文字列」って複数あるの?
    最大いくつあるんですか?

    一つだったら、
    if(strFiles[i].Contains("指定した文字列1") == false) で、「指定した文字列が入ってない」って判定できるけど。
    数が少なければ、条件文を&&でつないで、「すべてfalseのときファイルを移動させる」という使い方でいいでしょう。
    あまりにも数が多いorややこしいのであればRegexクラスを使った正規表現の方法を検討することになります。
    (これはちょっと難しいです。)

     
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52247  Re[12]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 11:17:41)
    No52243 (ごう さん) に返信
    
    とりあえず、サンプル作ってみたので掲示しておきます。
    (2)については、条件の個数や条件の共通点次第で、適切な判別方法が違ってくると思います。
    (条件式を使う方法or正規表現を使う方法)
    今回は、特定の文字列が2つしかないと仮定して作ってみました。
    
    正規表現を使う場合は、正規表現、Regexなどのキーワードで調査してみれば色々出てきます。
    
    
    string[] strFiles = System.IO.Directory.GetFiles("C:\\Test", "*", System.IO.SearchOption.AllDirectories);
    
    // ファイル名を改行記号で連結させる
    string strTmp = "";
    
    for (int i = 0; i < strFiles.Length; i++)
    {   
        //strTmp += strFiles[i] + "\r\n"; // ←「フルパス」で表示するならこちら
        strTmp += Path.GetFileName(strFiles[i]) + "\r\n"; // ←「ファイル名.拡張子」のみ表示できればいいならこちら
    
        // (2) 特定の文字列(仮に".txt", "2010_"とする)が含まれない場合 → Containsメソッドがfalseを返す場合
        if (Path.GetFileName(strFiles[i]).Contains(".txt") == false
            && (Path.GetFileName(strFiles[i]).Contains("2010_") == false)) 
        {
            // 選択したフォルダの直下に"TMP"という名前のフォルダを作っておく
            if (Directory.Exists("C:\\Test\\TMP") == false)
            {
                Directory.CreateDirectory("C:\\Test\\TMP");
            }
            
            // (3) 先ほど作った"TMP"フォルダに移動させる
            File.Move(strFiles[i], "C:\\Test\\TMP\\" + Path.GetFileName(strFiles[i]));
        }
    }
    
    // textBox1に表示
    textBox1.Text = strTmp; 
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52245  Re[12]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 11:14:48)
    No52243 (ごう さん) に返信
    > ■No52242 (mix さん) に返信
    >
    >>テキストボックス云々とは別で、本来の目的である
    >>(2)取得したファイル名に指定した文字列が含まれないか調べる
    >>(3)文字列が含まれないファイルを他のフォルダへ移動する
    >>へ移ろうと思って
    >>http://www.atmarkit.co.jp/fdotnet/dotnettips/411contains/contains.html
    >>を参照してみたのですが
    >>>指定した(複数の)文字列をファイル名に含まないファイル
    >>と考えたときにどのように応用を効かせればいいのか分かりません。
    >
    > えっ「指定した文字列」って複数あるの?
    > 最大いくつあるんですか?
    >
    > 一つだったら、
    > if(strFiles[i].Contains("指定した文字列1") == false) で、「指定した文字列が入ってない」って判定できるけど。
    > 数が少なければ、条件文を&&でつないで、「すべてfalseのときファイルを移動させる」という使い方でいいでしょう。
    > あまりにも数が多いorややこしいのであればRegexクラスを使った正規表現の方法を検討することになります。
    > (これはちょっと難しいです。)
    >

    Regexは確かに厳しいですね。
    多分5,6個で済むと思いますが、"含まないファイル"よりも"特定のファイル以外"を移動したほうが簡単に済みそうだとわかりました。
    無駄手間をかけさせてしまって申し訳ない…。この場合はどのようにすればいいのでしょう
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52248  Re[13]: 特定のファイルの移動について
□投稿者/ ごう -(2010/08/04(Wed) 11:22:21)
    No52245 (mix さん) に返信
    
    >"含まないファイル"よりも"特定のファイル以外"を移動したほうが簡単に済みそう
    
    これよくわからないです。
    特定の文字列を含むファイルを移動させたいんでしょうか?
    
    "string型変数".Contains("特定の文字列") 
    
    特定の文字列を含む   → ContainメソッドがTrueを返す
    
    特定の文字列を含まない → ContainメソッドがFalseを返す ですよ。
    
    
    この条件を考慮に入れて、色々試してみればいいんじゃないかと思います。
    もちろん、テスト環境(テストファイル)はいろんな条件で作っておいた上でね。
    それでは、もうそろそろ私もタイムリミットなので失礼します。
    
記事No.52195 のレス /過去ログ88より / 関連記事表示
削除チェック/

■52249  Re[14]: 特定のファイルの移動について
□投稿者/ mix -(2010/08/04(Wed) 11:43:05)
    No52248 (ごう さん) に返信

    私が考えている特定のファイルは "a"と"ab"があったときに、"ab"だけを移動させる、という事です。

    色々ありがとうございました。頑張ってみます。
記事No.52195 のレス / END /過去ログ88より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -