私はC#を初めて使用し、既存のサードパーティプログラムの制限により、ファイルが特定の時間基準を満たしている場合にファイルを移動するプログラムを作成していると確信しています。プログラムは現在の容量で動作しますが、宛先で同じ名前のファイルをチェックし、移動するファイルの名前を変更するようにしたいので、既存のファイルが存在する場合でもプログラムはエラーになりません。同名。また、一部のfnameとtargetは、カスタムクラスGloDirで宣言され、他の関数でも使用されます。
これは機能しますが、ターゲット内のファイルをチェックしません。
DirectoryInfo sourceInfo = new DirectoryInfo(GloDir.fname);
FileInfo[] sourceFiles = sourceInfo.GetFiles("*.zip");
//creates array of all files ending in .zip
DirectoryInfo destInfo = new DirectoryInfo(GloDir.target);
FileInfo[] destFiles = destInfo.GetFiles("*.zip");
if (sourceFiles.Length == 0) // check to see if files are present. if not die.
{
return;
}
foreach (var sFileInfo in sourceFiles)
{
string sFip = sFileInfo.ToString();
//file info to string
string fileName = System.IO.Path.GetFileName(sFip);
//get file name
string sourceFile = System.IO.Path.Combine(GloDir.fname, fileName);
//Full filename and path
string targetFile = System.IO.Path.Combine(GloDir.target, fileName);
//New Target and Path
DateTime createdOn = File.GetCreationTime(sourceFile);
//get file creation time
DateTime rightNow = DateTime.Now;
//Variable for this moment
var difference = rightNow - createdOn;
//Different between now and creation
var minutos = difference.TotalMinutes;
//turn difference into minutes
//If time between creation and now is greater than 120 minutes move file to new directory
if (minutos >= 1)
{
//Console.Write(minutos + " Old - Moving! -");
//debug console msg
System.IO.File.Move(sourceFile, targetFile);
//move file to new directory
//System.Threading.Thread.Sleep(1555);
//debug sleep
}
}
ターゲット内のファイルをチェックするために、ディレクトリのファイルをチェックするIfステートメントを追加するように変更し、値を比較して機能するネストされたforeachループを追加しました。唯一の問題は、ループ内で宣言された文字列を使用しようとしたとき、またはifステートメントで以下の追加を追加してコードをコピーしたときです。また、コンソールの書き込みとスリープの一部を残して、最終的なコードには含まれないプログラム関数を監視できるようにしました。
DirectoryInfo sourceInfo = new DirectoryInfo(GloDir.fname);
FileInfo[] sourceFiles = sourceInfo.GetFiles("*.zip");
//creates array of all files ending in .zip
DirectoryInfo destInfo = new DirectoryInfo(GloDir.target);
FileInfo[] destFiles = destInfo.GetFiles("*.zip");
if (sourceFiles.Length == 0)
// check to see if files are present. if not die.
{
//Console.Write("no files present");
//debug console msg
return;
}
foreach (var sFileInfo in sourceFiles)
{
string sFip = sFileInfo.ToString();
//file info to string
string fileName = System.IO.Path.GetFileName(sFip);
//get file name
if (destFiles.Length != 0)
{
foreach (var dFileInfo in destFiles)
{
string dFip = dFileInfo.ToString();
//file info to string
string dfileName = System.IO.Path.GetFileName(dFip);
//get file name
if (dfileName == fileName)
{
string newFilename = "Duplicate" + fileName;
Console.Write(newFilename + "dup change name");
System.Threading.Thread.Sleep(1000);
}
else
{
string newFilename = fileName;
Console.Write(newFilename + "dest files no duplicate");
System.Threading.Thread.Sleep(1000);
}
}
}
if (destFiles.Length == 0)
{
string newFilename = fileName;
}
string sourceFile = System.IO.Path.Combine(GloDir.fname, fileName);
//Full filename and path
string targetFile = System.IO.Path.Combine(GloDir.target, newFilename);
//New Target and Path
DateTime createdOn = File.GetCreationTime(sourceFile);
//get file creation time
DateTime rightNow = DateTime.Now;
//Variable for this moment
var difference = rightNow - createdOn;
//Different between now and creation
var minutos = difference.TotalMinutes;
//turn difference into minutes
//If time between creation and now is greater than 120 minutes move file to new directory
if (minutos >= 1)
{
System.IO.File.Move(sourceFile, targetFile);
//move file to new directory
}
}
宛先ディレクトリの条件に基づいて作成する必要がある場合でも、停止してnewFilename変数が現在のコンテキストに存在しないと表示されるたび。ifステートメントとループの外側に表示されるように、文字列newFilenameを別の方法で削除する必要がありますか?これは単純な間違いか、まだ学んでいない間違いだと確信しています。これも変数スコープの問題かもしれませんが、他の変数も文字列であることを考えるとそうは思いません。もう一度、私はC#を初めて使用しますが、助けていただければ幸いです。