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

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

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

Re[14]: 特定のファイルの移動について


(過去ログ 88 を表示中)

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

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

分類:[C#] 

一定のフォルダ以下で指定した文字列をファイル名に含まないファイル全てを他のフォルダへ移動するにはどうすればいいのでしょうか。

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

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

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

どこまでやりましたか?
どこが分からなかったですか?
引用返信 編集キー/
■52213 / inTopicNo.3)  Re[2]: 特定のファイルの移動について
□投稿者/ mix (2回)-(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に該当するこのあたりを参考にしてみましたが、理解には及びませんでした。
引用返信 編集キー/
■52222 / inTopicNo.4)  Re[3]: 特定のファイルの移動について
□投稿者/ ごう (143回)-(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型とか配列とかはわかりますか?
わからなければまた調査、質問してください。


引用返信 編集キー/
■52223 / inTopicNo.5)  Re[4]: 特定のファイルの移動について
□投稿者/ ごう (144回)-(2010/08/03(Tue) 20:38:53)
No52213 (mix さん) に返信

他に参考になりそうなものを。

(2)取得したファイル名に指定した文字列が含まれないか調べる

   「文字列に特定の文字列が含まれているかを調べるには?(Contains編)[2.0のみ、C#、VB]」
   http://www.atmarkit.co.jp/fdotnet/dotnettips/411contains/contains.html

   「文字列に特定の文字列が含まれているかを調べるには?」
   http://www.atmarkit.co.jp/fdotnet/dotnettips/128hasstring/hasstring.html
   
   これを応用させればできそう。


(3)文字列が含まれないファイルを他のフォルダへ移動する。

   「ファイルをコピー/削除/リネーム/移動するには?」
   http://www.atmarkit.co.jp/fdotnet/dotnettips/046filecopy/filecopy.html


それでは、健闘を祈ります。

引用返信 編集キー/
■52231 / inTopicNo.6)  Re[4]: 特定のファイルの移動について
□投稿者/ mix (4回)-(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型とか配列とかはわかりますか?
> わからなければまた調査、質問してください。

ありがとうございます。
配列をテキストボックスに表示するにはどのようにすればいいのでしょうか。
引用返信 編集キー/
■52233 / inTopicNo.7)  Re[5]: 特定のファイルの移動について
□投稿者/ ごう (145回)-(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] という感じでデータが入っています。

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

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




引用返信 編集キー/
■52235 / inTopicNo.8)  Re[6]: 特定のファイルの移動について
□投稿者/ mix (5回)-(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]を毎回指定しなければならないのでしょうか?
引用返信 編集キー/
■52237 / inTopicNo.9)  Re[7]: 特定のファイルの移動について
□投稿者/ ごう (146回)-(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箇所間違えたので訂正しておきました。ごめんねー
あと、バージョンについては了解しました。


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

ご丁寧な返信ありがとうございます。
スルーについては申し訳ない…。
VS 2010 Proを利用しています。
ごうさんに教えていただいた内容を元に試してみます。

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

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

ここのfilesは何を示してるのですか?
引用返信 編集キー/
■52240 / inTopicNo.12)  Re[9]: 特定のファイルの移動について
□投稿者/ ごう (147回)-(2010/08/04(Wed) 10:31:04)
No52239 (mix さん) に返信

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

まちがえました、files → strFilesに直してください。
strFiles.Lengthで配列の個数を取得できます。
引用返信 編集キー/
■52241 / inTopicNo.13)  Re[9]: 特定のファイルの移動について
□投稿者/ mix (9回)-(2010/08/04(Wed) 10:31:39)
No52239 (mix さん) に返信
> ■No52237 (ごう さん) に返信
>
>>for(int i=0; i<files.Length; i++)
>
> ここのfilesは何を示してるのですか?

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

レスにすれ違いがあったようですね…確認不足でした、申し訳ありません。
テキストボックス云々とは別で、本来の目的である
(2)取得したファイル名に指定した文字列が含まれないか調べる
(3)文字列が含まれないファイルを他のフォルダへ移動する
へ移ろうと思って
http://www.atmarkit.co.jp/fdotnet/dotnettips/411contains/contains.html
を参照してみたのですが
>指定した(複数の)文字列をファイル名に含まないファイル
と考えたときにどのように応用を効かせればいいのか分かりません。
引用返信 編集キー/
■52243 / inTopicNo.15)  Re[11]: 特定のファイルの移動について
□投稿者/ ごう (148回)-(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クラスを使った正規表現の方法を検討することになります。
(これはちょっと難しいです。)

 
引用返信 編集キー/
■52245 / inTopicNo.16)  Re[12]: 特定のファイルの移動について
□投稿者/ mix (11回)-(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個で済むと思いますが、"含まないファイル"よりも"特定のファイル以外"を移動したほうが簡単に済みそうだとわかりました。
無駄手間をかけさせてしまって申し訳ない…。この場合はどのようにすればいいのでしょう
引用返信 編集キー/
■52247 / inTopicNo.17)  Re[12]: 特定のファイルの移動について
□投稿者/ ごう (149回)-(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; 

引用返信 編集キー/
■52248 / inTopicNo.18)  Re[13]: 特定のファイルの移動について
□投稿者/ ごう (150回)-(2010/08/04(Wed) 11:22:21)
No52245 (mix さん) に返信

>"含まないファイル"よりも"特定のファイル以外"を移動したほうが簡単に済みそう

これよくわからないです。
特定の文字列を含むファイルを移動させたいんでしょうか?

"string型変数".Contains("特定の文字列") 

特定の文字列を含む   → ContainメソッドがTrueを返す

特定の文字列を含まない → ContainメソッドがFalseを返す ですよ。


この条件を考慮に入れて、色々試してみればいいんじゃないかと思います。
もちろん、テスト環境(テストファイル)はいろんな条件で作っておいた上でね。
それでは、もうそろそろ私もタイムリミットなので失礼します。

引用返信 編集キー/
■52249 / inTopicNo.19)  Re[14]: 特定のファイルの移動について
□投稿者/ mix (12回)-(2010/08/04(Wed) 11:43:05)
No52248 (ごう さん) に返信

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

色々ありがとうございました。頑張ってみます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -