将现有文件添加到文件夹

时间:2012-10-23 12:19:23

标签: c#

我是c#的初学者。在我的项目中,用户通过OpenFileDialog框选择一个Image文件。当他/她选择图像文件时,我运行的代码如下:

File.Copy(SourceFilePath, DestinationFilePath);

上述代码的问题在于,只要用户尝试添加现有图像文件,就会抛出错误。为避免此错误,我将代码更改为以下代码:

if (File.Exists(DestinationFilePath))
{
     intCount++;
     File.Copy(SourceFilePath,TemporaryFilePath);
     File.Copy(TemporaryFilePath, DestinationFilePath + intCount.ToString());
     File.Delete(TemporaryFilePath);                                
}
else
{
     File.Copy(SourceFilePath, DestinationFilePath);
}

上面代码中的问题是它在图像文件的最末端添加intCount值,如image.gif1,它正在更改文件扩展名。如何在图像文件路径中添加计数器?

我认为我在这里用来检查现有文件的方法并不正确。

更新:回答: -

        int intCount = 1;
        while (File.Exists(Application.StartupPath + DirectoryPath + strPath))
        {
            strPath = Path.GetFileNameWithoutExtension(strPath) + intLarge.ToString() + Path.GetExtension(strPath);
            intCount++;
        }
        intCount = 1;

5 个答案:

答案 0 :(得分:2)

private string GetIndexedFilePath(string path, int index)
{
   var directoryName = Path.GetDirectoryName(path);
   var oldFileName = Path.GetFileNameWithoutExtension(path);
   var extension = Path.GetExtension(path);
   var indexedFileName = String.Format("{0}_{1}{2}", oldFileName, index, extension);
   return Path.Combine(directoryName, indexedFileName);
}

顺便说一下,在将文件重命名为“file_2.gif”之后,您仍然可能与目标目录中已存在的文件存在名称冲突。

string destinationPath;
int index = 0;
do
{
    destinationPath = GetIndexedFilePath(path, ++index);
}
while(File.Exists(destinationPath));
// Copy file to destinationPath

答案 1 :(得分:1)

使用

Path.GetFileNameWithoutExtension(string destinationfilename)

向其添加int并添加您可以通过

获取的扩展名
Path.GetExtension(string destinationfilename)

答案 2 :(得分:1)

而不是:

DestinationFilePath + intCount.ToString()

您可以使用:

intCount.ToString() + DestinationFilePath

将其添加到开头,结果为1image.gif

答案 3 :(得分:1)

最好的方法是创建一个新的文件路径。

以下函数将image.gif的计数为1,即image1.gif

private string GetIncrementedFilePath(string orginalFilePath, int count)
{
    var extension = Path.GetExtension(orginalFilePath);
    var fileName = Path.GetFileNameWithoutExtension(orginalFilePath);
    var directory = Path.GetDirectoryName(orginalFilePath);

    var newFullPath = string.Format("{0}\\{1}{2}{3}", directory, fileName, count, extension);

    return newFullPath;
}

请注意,Path.GetExension会为您提供'.gif'而不是'gif'

// Summary:
//     Returns the extension of the specified path string.
//
// Parameters:
//   path:
//     The path string from which to get the extension.
//
// Returns:
//     A System.String containing the extension of the specified path (including
//     the "."), null, or System.String.Empty. If path is null, GetExtension returns
//     null. If path does not have extension information, GetExtension returns Empty.
//
// Exceptions:
//   System.ArgumentException:
//     path contains one or more of the invalid characters defined in System.IO.Path.GetInvalidPathChars().
public static string GetExtension(string path);

如果你想知道文件是否存在,那么.NET内置了一个函数来实现它。

// Summary:
//     Determines whether the specified file exists.
//
// Parameters:
//   path:
//     The file to check.
//
// Returns:
//     true if the caller has the required permissions and path contains the name
//     of an existing file; otherwise, false. This method also returns false if
//     path is null, an invalid path, or a zero-length string. If the caller does
//     not have sufficient permissions to read the specified file, no exception
//     is thrown and the method returns false regardless of the existence of path.
File.Exists(path);

答案 4 :(得分:1)

您可以使用类Path对包含文件或目录名称信息的System.String实例执行操作,以将表示文件名的字符串与其扩展名分开

实施例

string Name = Path.GetFileNameWithoutExtension(DestinationFilePath); //Get the file name excluding its extension
string Extension = Path.GetExtension(DestinationFilePath); //Declare a new string representing the extension of the file
File.Copy(TemporaryFilePath,  DestinationFilePath.Replace(Path.GetFileName(DestinationFilePath), "") + Name + intCount.ToString() + Extension); //Copy from TemporaryFilePath to DestinationFilePath appending a number after the string then the Extension we gathered first

上面发布的示例会将文件名(例如TemporaryFilePath\File_Name.(Extension))复制到DestinationFilePath\File_Name (intCount).(Extension),其中(intCount)代表一个数字,(Extension)代表文件的扩展名。因此,如果intCount等于1Extension.exe

,则文件名的最终外观如下所示
  • DestinationFilePath\File_Name 1.exe

谢谢, 我希望你觉得这很有帮助:)