主程序:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace Photo_name_change_tool
{
public partial class Form1 : Form
{
public List<string> FilesName = new List<string>();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog FilesPathDialog = new FolderBrowserDialog();
FilesPathDialog.Description = "Browse Photo Files Path:";
if (FilesPathDialog.ShowDialog() == DialogResult.OK)
{
string FilesPath = FilesPathDialog.SelectedPath;
textBox1.Text = FilesPath;
ScanPhotoFiles(FilesPath);
}
}
private void ScanPhotoFiles(string FilesPath)
{
FilesName.Clear();
DirectoryInfo FilesFolder = new DirectoryInfo(FilesPath);
for (int i = 0; i < FilesFolder.GetFiles().Length; i++)
{
if (FilesFolder.GetFiles()[i].Length > 0 && FilesFolder.GetFiles()[i].Extension == ".jpg")
{
ListViewItem lvi = new ListViewItem();
lvi.Text = (i + 1).ToString();
lvi.SubItems.Add(FilesFolder.GetFiles()[i].Name);
lvi.SubItems.Add("-");
lvi.SubItems.Add("-");
lvi.SubItems.Add("-");
listView1.Items.Add(lvi);
FilesName.Add(FilesFolder.GetFiles()[i].Name);
}
}
ChangePhotoFilesName();
}
private void ChangePhotoFilesName()
{
for (int i = 0; i != FilesName.Count; i++)
{
Exif.Picturexif em = new Exif.Picturexif();
Exif.Picturexif.Metadata m = em.GetEXIFMetaData(textBox1.Text + @"\" + FilesName[i]);
//获取EXIF 照片拍摄时间
if (m.DatePictureTaken.DisplayValue != null)
{
listView1.Items[i].SubItems[2].Text = m.DatePictureTaken.DisplayValue;
}
else
{
listView1.Items[i].SubItems[2].Text = "-";
}
//更改文件名为EXIF 照片拍摄时间
if (listView1.Items[i].SubItems[2].Text != "-")
{
string TargetName = listView1.Items[i].SubItems[2].Text.ToString();
TargetName = TargetName.Replace(":", "");
TargetName = TargetName.Replace(" ", "_");
listView1.Items[i].SubItems[3].Text = TargetName+".jpg";
if (listView1.Items[i].SubItems[1].Text != listView1.Items[i].SubItems[3].Text)
{
//File.Move(textBox1.Text + @"\" + listView1.Items[i].SubItems[1].Text, textBox1.Text + @"\" + listView1.Items[i].SubItems[3].Text);
listView1.Items[i].SubItems[4].Text = "Successful";
}
}
}
}
}
}
Exif类参照:
http://www.cnblogs.com/yeminglong/p/3172719.html
问题出在listView1.Items[i].SubItems[2].Text = m.DatePictureTaken.DisplayValue;
listView1.Items[i].SubItems[3].Text = TargetName+".jpg"; 没有后面的.jpg
且File.Move(textBox1.Text + @"\" + listView1.Items[i].SubItems[1].Text, textBox1.Text + @"\" + listView1.Items[i].SubItems[3].Text);提示路径中有非法字符
求解,显示都是正常的,为啥就是无法拼接这个字符串,为啥更改文件名会出现路径非法。
感谢!
路径C:\Users\Air\Desktop\新建文件夹
源文件名:
C:\Users\Air\Desktop\新建文件夹\1.jpg
新文件名:
C:\Users\Air\Desktop\新建文件夹\20150301_135212.jpg
MessageBox 显示出来也正常,但执行时就报错。
相当诡异。
已将项目压缩上传至临时服务器:
http://dev.airsky.cc/csdn_16615.rar