こんにちは、ソース フォルダーから宛先フォルダーにファイルをコピーするコードを作成しようとしています。宛先フォルダーに同じファイル名が含まれている場合、プログラムはファイルを別の名前で保存する必要があります。例: ソース フォルダーの内容: C:\test\ test1.txt test2.txt
宛先フォルダーには、D:\test\ test1.txt test2.txt test3.txt が含まれます
コピー アクションは、名前を test4.txt および test5.txt に変更して、ソースから宛先フォルダーに test1.txt および test2.txt をコピーする必要があります。
これは完全なコードではありません。しかし、非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要ですというエラーが表示されます。getFileName (ref destfileName、ref targetPath) で。これについて何か助けはありますか?
class Program
{
static void Main(string[] args)
{
string sourcefileName = null;
string destfileName = null;
string sourcePath = @"C:\test";
string targetPath = @"D:\test";
List<int> seqNum = new List<int>();
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy all the files in one directory to another directory.
// Get the files in the source folder. (To recursively iterate through
// all subfolders under the current directory, see
// "How to: Iterate Through a Directory Tree.")
// Note: Check for target path was performed previously
// in this code example.
if (System.IO.Directory.Exists(sourcePath))
{
string[] files = System.IO.Directory.GetFiles(sourcePath);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
//File name is like text1.txt
sourcefileName = System.IO.Path.GetFileName(s);
if (System.IO.Directory.GetFiles(targetPath).Count() > 0)
{
foreach (string file in System.IO.Directory.GetFiles(targetPath))
{
if (file.Contains(sourcefileName))
{
int num;
string existingLatestFile = string.Empty;
destfileName = sourcefileName.Replace(".txt", string.Empty);
for (int i = 0; i < sourcefileName.Length; i++)
{
if (Char.IsDigit(sourcefileName[i]))
{
existingLatestFile += sourcefileName[i];
}
}
if (int.TryParse(existingLatestFile, out num))
{
seqNum.Add(num);
}
destfileName = destfileName.Replace(existingLatestFile, string.Empty);//Remove existing number
num = num + 1;
destfileName = destfileName + num.ToString() + ".txt"; // Make a new file name
while (!getFileName( ref destfileName, ref targetPath))
{
}
}
else
{
destfileName = sourcefileName;
}
string destFile = System.IO.Path.Combine(targetPath, destfileName);
System.IO.File.Copy(s, destFile, false);
}
}
}
}
else
{
Console.WriteLine("Source path does not exist!");
}
if (System.IO.Directory.GetFiles(targetPath).Count() > 0)
{
foreach (string file in System.IO.Directory.GetFiles(targetPath))
{
/* if (file.Contains(dir + "\\" + filename))
{
int num;
existingLatestFile = file.Replace(dir + "\\" + filename, string.Empty);
existingLatestFile = existingLatestFile.Replace(".txt", string.Empty);
if (int.TryParse(existingLatestFile, out num))
{
seqNum.Add(num);
}
}*/
Console.WriteLine(file);
}
}
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
bool getFileName(ref string filename, ref string destFolder)
{
bool retValue =false;
foreach (string file in System.IO.Directory.GetFiles(destFolder))
{
if (file.Contains(filename))
{
retValue = false;
}
else
{
retValue = true;
}
}
return retValue;
}
}