我是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;
答案 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
等于1
且Extension
为.exe
DestinationFilePath\File_Name 1.exe
谢谢, 我希望你觉得这很有帮助:)