例如:他们是用";"分割的。但是文件夹名中是允许有";"和".doc".".txt"之类的字符出现的string str = @"D:\新建文件夹.txt;图片文件\图片.jpg;D:\NEW\新闻;文件.txt夹\焦点;新闻;D:\科技;文件.doc夹\科技.doc"其中D:\新建文件夹.txt;图片文件\图片.jpg;D:\新建文件夹.txt;图片文件\图片.jpg;D:\科技;文件.doc夹\科技.doc是文件名D:\NEW\新闻;文件.txt夹\焦点;新闻是文件夹名
解决方案 »
- 急,大家进来看看,这种word文件里面数据怎么导入到数据库中
- ArrayList无法删除元素
- 在WebBrowser1_DocumentCompleted过程中,我用了三种方法都得不到下载网页内容,是怎么回事,是取得网页的方法不对吗,请指教。见代码:
- 没有分了,axMSFlexGrid 控制单元格的背景颜色
- ASP.NET获取GridView中选中行的值
- C#调用执行一个外部exe,安装成系统服务,为什么停止服务时没有停止执行这个exe呢???
- 如何设置DATAGRID 的列名%……
- 求助:关于word上传至数据库的问题!(您的举手之劳,我遍散分!)
- c#多线程编程可以同时开128个线程嘛?
- 在Web应用程序中如何实现在客户端的IE浏览器里打开客户端的文本文件并写入Web服务器上的数据库中?
- 请教关于VPN的基础问题
- 怎样判断以下代码生成的checkbox是否被选中?
D:\科技;文件.doc夹\科技.doc 是文件名 D:\NEW\新闻;文件.txt夹\焦点;新闻 是文件夹名
string[] strArray = str.Split(';');
StringBuilder strFile = new ....//文件
............ strFolder ..... //文件夹
for(int i=0; i<strArray.Count; i++)
{
if(strArray[i].LastIndexOf('.') > 0)
strFie.Append(strArray[i]);
else
strFolder.Append(strArray[i]);
}
我要一起获取字符串里的文件名和文件夹名
否则,认为它是一个文件夹的一部分,继续遍历直到遇到文件结尾或者遇到D:等盘符但是这个方法也不能说准确,因为如果你有连续两个相对路径文件夹名而且其中带分号,那就没有办法了。
你能告诉我这是个文件夹还是文件吗?答案是2个都可以 你可以在D盘下建立个叫123.txt的文件夹也可以建立个123.txt文本文件你这字符串没一个特殊字符 让人怎么判断
Path.GetDirectoryName 方法
public void GetFolderFile()
{
string str = @"D:\新建文件夹.txt;图片文件\图片.jpg;D:\NEW\新闻;文件.txt夹\焦点;新闻;D:\科技;文件.doc夹\科技.doc"; string[] substrings = str.Split(':');
List<string> folders = new List<string>();
List<string> files = new List<string>();
for (int i = 1; i < substrings.Length; i++)
{
if (substrings[i].LastIndexOf(".") < 0)
{//是文件夹
buildList(substrings[i - 1], substrings[i], folders, files, 0);
}
else
{
if (substrings[i].Substring(substrings[i].LastIndexOf(".")).Contains("\\"))
{//是文件夹
buildList(substrings[i - 1], substrings[i], folders, files, 0);
}
else
{//是文件
buildList(substrings[i - 1], substrings[i], folders, files, 1);
}
}
}
removeTail(folders);
removeTail(files); } private void removeTail(List<string> list)
{
if (list.Count == 1)
{
if (list[0].LastIndexOf(";") < list[0].Length - 1)
{
list[0] = list[0].Remove(list[0].Length - 1);
}
}
else
{
for (int i = 0; i < list.Count - 1; i++)
{
list[i] = list[i].Remove(list[i].Length - 1);
}
}
} private void buildList(string prefix, string current, List<string> folders, List<string> files, int mode)
{
if (mode == 0)
folders.Add(prefix.Substring(prefix.Length - 1) + ":" + current);//.Substring(0, current.Length - 1));
else
files.Add(prefix.Substring(prefix.Length - 1) + ":" + current);//.Substring(0, current.Length - 1));
}
//仅供参考
string str = @"D:\新建文件夹.txt;图片文件\图片.jpg;D:\NEW\新闻;文件.txt夹\焦点;新闻;D:\科技;文件.doc夹\科技.doc";
string[] arr = Regex.Split(str, @"(?i);(?=$|(?:[a-z]:\\))"); Response.Write(string.Format("Input : {0}<br />", str)); string strType = string.Empty; for(int i=0;i<arr.Length ;i++)
{
strType=Regex.IsMatch(arr[i], @"(?i)\.[a-z0-9]{3,}$") ? "文件名" : "文件夹名";
//声明:文件后缀名没有做严格的过滤。
Response.Write(string.Format("{0} : {1} [Type:{2}]<br />", i, arr[i], strType));
}
/*
//Result:Input : D:\新建文件夹.txt;图片文件\图片.jpg;D:\NEW\新闻;文件.txt夹\焦点;新闻;D:\科技;文件.doc夹\科技.doc
0 : D:\新建文件夹.txt;图片文件\图片.jpg [Type:文件名]
1 : D:\NEW\新闻;文件.txt夹\焦点;新闻 [Type:文件夹名]
2 : D:\科技;文件.doc夹\科技.doc [Type:文件名]
*/