Błędy o nieznalezieniu pliku, blokada zmiany nazwy

0

Mam pytanie napisałem kod który jest poniżej. Mam w danych folderze 200 000 plikow wav ktore chce posortowac folderami i przeniesc, rok->miesiac>dzien. po uruchomieniu wywala mi sie i wyskakuje mi komunikat nie moze odnaleŹć pliku ktory rzeczywiscie jest. z reguly pliki beda mniec nazwe 200002021232ef.wav. oraz chce sobie zrobic blokady jak w pierwszych 8 znakach bedzie znak a nie liczba nie przenosi ani nie tworzy folder.
o to moj kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{

class Program
{
static void Main(string[] args)
{
const string core = @"D:\TEST\";

DirectoryInfo sciezka = new DirectoryInfo(core);


FileInfo[] pliki = sciezka.GetFiles("*.wav");
try{
foreach (FileInfo file in pliki)
{
string frok = file.Name;

string nfrok = frok.Substring(0, 4);
DirectoryInfo sciezka2 = new DirectoryInfo(core + nfrok);

string nfmiesiac = frok.Substring(4, 2);
string nfdzien = frok.Substring(6, 2);
string path_temp = string.Format("{0}\\{1}\\{2}\\", core, nfrok, nfmiesiac);
string pathtemp2 = string.Format("{0}\\{1}\\{2}\\{3}\\", core, nfrok, nfmiesiac, nfdzien);


DirectoryInfo sciezka3 = new DirectoryInfo(path_temp);
DirectoryInfo sciezka4 = new DirectoryInfo(pathtemp2);

if (!sciezka2.Exists)
{
Console.WriteLine("Folder został utworzony o nazwie: " + nfrok + " z powodu jego braku");
sciezka.CreateSubdirectory(nfrok);
}
else
{
Console.WriteLine("Folder o nazwie: " + nfrok + " już istnieje");
}

if (!sciezka3.Exists)
{

Console.WriteLine("folder został utworzony o nazwie: " + nfmiesiac + " z powodu jego braku");
sciezka2.CreateSubdirectory(nfmiesiac);
Console.WriteLine("Folder zostal utworzony o nazwie: " + nfdzien + " z powodu jego braku");
sciezka3.CreateSubdirectory(nfdzien);

}
else
{
Console.WriteLine("Folder o nazwie: " + nfmiesiac + " juz istenieje");
Console.WriteLine("folder o nazwie: " + nfdzien + " juz istnieje");
}


Directory.Move(core+frok,sciezka4+frok);
File.Move(core + frok, pathtemp2);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}

Console.Read();
}
}
}

Moze proponujecie cos do poprawy czy cos, kazda pomoc przyjme

0

Jeżeli chcesz, aby ktokolwiek ci pomógł, to najpierw wypadałoby sformatować kod...

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{

class Program
{
static void Main(string[] args)
{
const string core = @"D:\TEST\";

DirectoryInfo sciezka = new DirectoryInfo(core);


FileInfo[] pliki = sciezka.GetFiles("*.wav");
try{
foreach (FileInfo file in pliki)
{
string frok = file.Name;

string nfrok = frok.Substring(0, 4);
DirectoryInfo sciezka2 = new DirectoryInfo(core + nfrok);

string nfmiesiac = frok.Substring(4, 2);
string nfdzien = frok.Substring(6, 2);
string path_temp = string.Format("{0}\\{1}\\{2}\\", core, nfrok, nfmiesiac);
string pathtemp2 = string.Format("{0}\\{1}\\{2}\\{3}\\", core, nfrok, nfmiesiac, nfdzien);


DirectoryInfo sciezka3 = new DirectoryInfo(path_temp);
DirectoryInfo sciezka4 = new DirectoryInfo(pathtemp2);

if (!sciezka2.Exists)
{
Console.WriteLine("Folder został utworzony o nazwie: " + nfrok + " z powodu jego braku");
sciezka.CreateSubdirectory(nfrok);
}
else
{
Console.WriteLine("Folder o nazwie: " + nfrok + " już istnieje");
}

if (!sciezka3.Exists)
{

Console.WriteLine("folder został utworzony o nazwie: " + nfmiesiac + " z powodu jego braku");
sciezka2.CreateSubdirectory(nfmiesiac);
Console.WriteLine("Folder zostal utworzony o nazwie: " + nfdzien + " z powodu jego braku");
sciezka3.CreateSubdirectory(nfdzien);

}
else
{
Console.WriteLine("Folder o nazwie: " + nfmiesiac + " juz istenieje");
Console.WriteLine("folder o nazwie: " + nfdzien + " juz istnieje");
}


Directory.Move(core+frok,sciezka4+frok);
File.Move(core + frok, pathtemp2);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}

Console.Read();
}
}
}

Masz racje :)

1

Formatowanie kodu to nie jest kolorowanie składni.
Formatowanie kodu polega na wkładaniu w odpowiednie miejsca spacji (bądź tabulatorów) tak, aby było widać poszczególne bloki kodu.
Np:

int somefunction()
{
a=b;
b=c;
if(a==b)
{
b=c;
if(c==a)
{
a=b=c;
b=2*a;
}else{
a=a*2;
}
}
}

Po sformatowaniu wyglądać będzie tak:

int somefunction()
{
  a=b;
  b=c;
  if (a==b)
  {
    b=c;
    if (c==a)
    {
      a=b=c;
      b=2*a;
    } else
    {
      a=a*2;
    }
  }
}

Chodzi o czytelność; po prostu tak jest łatwiej wykryć niedomknięcia, błędnie postawione "else", itd.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{
 
class Program
	{
	static void Main(string[] args)
		{
		const string core = @"D:\TEST\";
 
		DirectoryInfo sciezka = new DirectoryInfo(core);
 
 
		FileInfo[] pliki = sciezka.GetFiles("*.wav");
			try{
				foreach (FileInfo file in pliki)
				{
					string frok = file.Name;
 
					string nfrok = frok.Substring(0, 4);
					DirectoryInfo sciezka2 = new DirectoryInfo(core + nfrok);
 
					string nfmiesiac = frok.Substring(4, 2);
					string nfdzien = frok.Substring(6, 2);
					string path_temp = string.Format("{0}\\{1}\\{2}\\", core, nfrok, nfmiesiac);
					string pathtemp2 = string.Format("{0}\\{1}\\{2}\\{3}\\", core, nfrok, nfmiesiac, nfdzien);
 
 
					DirectoryInfo sciezka3 = new DirectoryInfo(path_temp);
					DirectoryInfo sciezka4 = new DirectoryInfo(pathtemp2);
 
						if (!sciezka2.Exists)
						{
							Console.WriteLine("Folder został utworzony o nazwie: " + nfrok + " z powodu jego braku");
							sciezka.CreateSubdirectory(nfrok);
						}
						else
						{
							onsole.WriteLine("Folder o nazwie: " + nfrok + " już istnieje");
						}
 
						if (!sciezka3.Exists)
						{
							Console.WriteLine("folder został utworzony o nazwie: " + nfmiesiac + " z powodu jego braku");
							sciezka2.CreateSubdirectory(nfmiesiac);
							Console.WriteLine("Folder zostal utworzony o nazwie: " + nfdzien + " z powodu jego braku");
							sciezka3.CreateSubdirectory(nfdzien);
 
						}
						else
						{
							Console.WriteLine("Folder o nazwie: " + nfmiesiac + " juz istenieje");
							Console.WriteLine("folder o nazwie: " + nfdzien + " juz istnieje");
						}
 
 
					Directory.Move(core+frok,sciezka4+frok);
					File.Move(core + frok, pathtemp2);
				}
			catch (Exception ex)
			{
				Console.WriteLine(ex.Message, ex);
			}
 
		Console.Read();
			}
		}
	}

Jak widać początkujący :/

0

z tym formatowaniem, to chodziło o mniej więcej coś takiego. tak w ogóle to nie napisałeś z czym masz problem:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{

class Program
{
static void Main(string[] args)
  {
    const string core = @"D:\TEST\";
 
    DirectoryInfo sciezka = new DirectoryInfo(core);
 
    FileInfo[] pliki = sciezka.GetFiles("*.wav");
    try
      {
        foreach (FileInfo file in pliki)
          {
            string frok = file.Name;
 
            string nfrok = frok.Substring(0, 4);
            DirectoryInfo sciezka2 = new DirectoryInfo(core + nfrok);
 
            string nfmiesiac = frok.Substring(4, 2);
            string nfdzien = frok.Substring(6, 2);
            string path_temp = string.Format(
                                               "{0}\\{1}\\{2}\\",
                                               core,
                                               nfrok,
                                               nfmiesiac
                                            );
            string pathtemp2 = string.Format(
                                               "{0}\\{1}\\{2}\\{3}\\",
                                               core,
                                               nfrok,
                                               nfmiesiac,
                                               nfdzien
                                            );

            DirectoryInfo sciezka3 = new DirectoryInfo(path_temp);
            DirectoryInfo sciezka4 = new DirectoryInfo(pathtemp2);
 
            if (!sciezka2.Exists)
              {
                Console.WriteLine(  "Folder został utworzony o nazwie: "
                                  + nfrok + " z powodu jego braku");
                sciezka.CreateSubdirectory(nfrok);
              }
            else
              {
                Console.WriteLine("Folder o nazwie: " + nfrok + " już istnieje");
              }
 
            if (!sciezka3.Exists)
              {
                Console.WriteLine(  "folder został utworzony o nazwie: "
                                  + nfmiesiac + " z powodu jego braku");
                sciezka2.CreateSubdirectory(nfmiesiac);
                Console.WriteLine("Folder zostal utworzony o nazwie: "
                                  + nfdzien + " z powodu jego braku");
                sciezka3.CreateSubdirectory(nfdzien);
              }
            else
              {
                Console.WriteLine(  "Folder o nazwie: "
                                  + nfmiesiac + " juz istenieje");
                Console.WriteLine(  "folder o nazwie: " + nfdzien
                                  + " juz istnieje");
              }
 
            Directory.Move(core+frok,sciezka4+frok);
            File.Move(core + frok, pathtemp2);
          }
      }
    catch (Exception ex)
      {
        Console.WriteLine(ex.Message, ex);
      }
    Console.Read();
  }
}
}
0

Tyle co na razie zauważyłem:
Pobierasz rok z nazwy pliku, a potem z tego roku pobierasz miesiąc i dzień. Miesiąc i dzień powinieneś też pobierać z nazwy pliku chyba.

EDIT:
I tak jest - masz podobne nazwy zmiennych (frok,nfrok) i mnie tu zmyliło.

0

Kwestia jest taka ze mam plik przykładowo 200002021232ef.wav. Chce tworzyc folder o nazwie pierwszych 4 znakow nazwy czyli 2000 pozniej pod folder czyli pobieram 2 znaki miesiac pozniej nastepny pod folder pobieram 2 znaki dzien. i tam dany plik chce przeniesc. I chce zrobic warunki by w pierwszych 8 znakach jak sa litery lub inne znaki nie tworzyl mi folderow ani tym bardziej przenosil lub jak plik nie mozna przeniesc. Jak uruchamiam 100 000 plikow to po jakims czasie wyskakuje mi ze nie ma tych plikow. Czy to moze byc ze pamiec przepelniona jest. Prosze o propozycje lub pomoc

0

Jeśli chodzi o formatowanie kodu, to wystarczy wcisnąć w Visual Studio kombinację: ctrl + E, a następnie D.

0

Dzieki na pewno się przyda

Doradzi mi ktoś albo pokieruje ?

0

Jeżeli chcesz sprawdzić czy pierwsze 8 znaków jest liczbą najlepiej użyj wyrażeń regularnych albo np:

int check;
string substr = frok.Substring(0,8).Trim();
if (int.TryParse(substr,out check) && substr.Length == 6)
{
   //wszystko ok
}
0

To może ja zapytam konkretniej niż poprzednicy :)
W której linijce dokładnie się wywala? Jakie wartości mają ścieżki źródłowa i docelowa, gdy powstaje błąd? Czy próbowaleś puścić program pod debugerem i wykonywać program krok po kroku? Jaki dokładnie komunikat błędu dostajesz? Tego typu problemy najczęściej najszybciej załatwia się debugerem a nie pisząc na forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1