2016-07-28 5 views
0

私は変換にほとんど問題がありません。サブフォルダは作成していますが、サブフォルダを作成していないフォルダを変換しようとすると、 "_converted"というフォルダが1つしか作成されず、サブフォルダのイメージがすべて変換されます。サブフォルダを作成する

マイコード:

private void btnConvert_Click(object sender, EventArgs e) 
{ 
    string[] originalImage = Directory.GetDirectories(txtFilePath.Text, "*.*", 
                  SearchOption.AllDirectories); 
    foreach (var directory in originalImage) 
    { 
     Debug.WriteLine(directory); 
    } 
    foreach (string dir in originalImage) 
    { 

     string folderPath = @"C:\test\" + "_converted"; 
     folderPath = folderPath.Substring(folderPath.IndexOf(@"\") + 1); 
     DirectoryInfo di = Directory.CreateDirectory(folderPath); 
     if (Directory.Exists(folderPath)) 
     { 
      DirectoryInfo dInfo = new DirectoryInfo(dir); 
      foreach (var filename in dInfo.GetFiles()) 
      { 

       FileInfo fInfo = new FileInfo(filename.FullName); 
       var fileExtension = fInfo.Extension; 
       var fileOriginalDate = fInfo.CreationTime; 

       if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG") 
       { 
        using (Bitmap bitmap = new Bitmap(filename.FullName)) 
        { 
         string fn = Path.GetFileNameWithoutExtension(filename.FullName); 
         VariousQuality(bitmap, fn, fileExtension, 
               fileOriginalDate, folderPath); 
        } 
       } 
      } 
     } 
    } 
} 

私はこの方法を使用してみました:

folderPath = folderPath.Substring(folderPath.IndexOf(@"\") + 1); 

私はこの問題を解決するにはどうすればよいですか?

+0

なぜ最初に2回ループするのですか?デバッグコールを2番目のループに移動できませんか? – user3185569

+0

はい、これはこの問題を解決していません.. –

+0

なぜこのようにしますか?folderPath.Substring(folderPath.IndexOf(@ "\")+ 1); '? +コード内にサブフォルダを作成する場所がありません。 1つの場所にフォルダを作成するのは、 'C:\ test \ _converted'に割り当てられた静的な文字列です – user3185569

答えて

0

をあなたは正しく、フォルダの名前を処理していません。試してみてください:

private void btnConvert_Click(object sender, EventArgs e) 
{ 
    string[] originalImage = Directory.GetDirectories(txtFilePath.Text, "*.*", SearchOption.AllDirectories); 

    foreach (var directory in originalImage) 
    { 
     Debug.WriteLine(directory); 
    } 
    foreach (string dir in originalImage) 
    { 
     // The name of the current folder (dir) 
     // This will convert "C:\Users\User\Desktop\Myfolder\Image1" to simply "Image1" since we create a substring after the LAST backslash ('\') 
     string folderName = dir.Substring(dir.LastIndexOf('\\') + 1); // Ex. "Image1" 

     // This will now be "C:\test\FOLDERNAME_converted" 
     string folderPath = @"C:\test\" + folderName + @"_converted\"; // Ex. "C:\test\image1_converted\"; 

     // This can now create the folders 
     DirectoryInfo di = Directory.CreateDirectory(folderPath); 

     // Below is unchanged for now 
     if (Directory.Exists(folderPath)) 
     { 
      DirectoryInfo dInfo = new DirectoryInfo(dir); 
      foreach (var filename in dInfo.GetFiles()) 
      { 
       FileInfo fInfo = new FileInfo(filename.FullName); 
       var fileExtension = fInfo.Extension; 
       var fileOriginalDate = fInfo.CreationTime; 

       if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG") 
       { 
        using (Bitmap bitmap = new Bitmap(filename.FullName)) 
        { 
         string fn = Path.GetFileNameWithoutExtension(filename.FullName); 
         VariousQuality(bitmap, fn, fileExtension, 
               fileOriginalDate, folderPath); 
        } 
       } 
      } 
     } 
    } 
} 

私はこれが役に立ちます。

私には1つの質問があります。ディレクトリパス(txtFilePath.Text)にディレクトリを取得すると、サブフォルダ(SearchOptions.AllDirectories)を含むすべてのフォルダが取得されます。変換されたフォルダを "C:\test"フォルダに保存するときは、フォルダがサブフォルダであった可能性は考慮しません。このため、以下の問題が発生します。あなたは、フォルダとフォルダのフォルダを持っているとしましょう:

"HeadFolder -> Image1 -> Image1.2" 

プログラムがありますどのような:

あなたが買ってあげる変換した後:

"HeadFolder" 
    "Image1" 
    "Image1.2" 

お知らせ」というImage1.2 "は変換前の状態で" Image1 "の内部には入りません

+0

ありがとう!ワーキング! –

+0

うれしい – MasterXD

0

ループの各繰り返しで同じフォルダを作成しています。このラインでは

string folderPath = @"C:\test\" + "_converted"; 
folderPath = folderPath.Substring(folderPath.IndexOf(@"\") + 1); 

::ちょうど下の行置き換えることで、現在のディレクトリを使用してフォルダを作成し

string folderPath = Path.Combine(@"C:\test\", dir + "_converted"); 
関連する問題