0

こんにちは、ソース フォルダーから宛先フォルダーにファイルをコピーするコードを作成しようとしています。宛先フォルダーに同じファイル名が含まれている場合、プログラムはファイルを別の名前で保存する必要があります。例: ソース フォルダーの内容: 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;
    }
}
4

2 に答える 2

6

Main()静的メソッドです。
どのインスタンスにも関連付けられていません。

他のメソッドも静的にする必要があります。

于 2012-08-14T17:18:35.250 に答える
0

mainは静的メソッドです。非静的メソッドgetFileNameを呼び出すには、最初にインスタンスを作成する必要があります

変化する

while (!getFileName...

Program p = new Program();
while (!p.getFileName...
于 2012-08-14T17:21:21.577 に答える