.net里长短文件名的解决办法

2023-11-21 07:10

本文主要是介绍.net里长短文件名的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我用Path.GetTempFileName()函数去取一个目录名时,竟然得到这样的结果:C:\DOCUME~1\Vitami~1。。。应该是c:\Documents and Settings\VitaminC.net的。找了半天,最后在GotDotNet找到了结果,把代码贴出来大家看看:

None.gifusing  System;
None.gif
using
 System.Text;
None.gif
using
 System.Runtime.InteropServices;
None.gif
None.gif
namespace
 ShellPathNameConvert
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**/
/// <summary>
InBlock.gif    
/// Converts file and directory paths to their respective
InBlock.gif    
///
 long and short name versions.
InBlock.gif    
/// </summary>

ExpandedSubBlockEnd.gif    
/// <remarks>This class uses InteropServices to call GetLongPathName and GetShortPathName</remarks>

InBlock.gif    public class Convert
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
{
InBlock.gif        [DllImport(
"kernel32.dll"
)]
InBlock.gif        
static extern uint GetLongPathName(string
 shortname, StringBuilder
InBlock.gif            longnamebuff, 
uint
 buffersize);
InBlock.gif
InBlock.gif        [DllImport(
"kernel32.dll", CharSet =
 CharSet.Auto)]
InBlock.gif        
public static extern int
 GetShortPathName(
InBlock.gif            [MarshalAs(UnmanagedType.LPTStr)]
InBlock.gif            
string
 path,
InBlock.gif            [MarshalAs(UnmanagedType.LPTStr)]
InBlock.gif            StringBuilder shortPath,
InBlock.gif            
int
 shortPathLength);
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**/
/// <summary>
InBlock.gif        
/// The ToShortPathNameToLongPathName function retrieves the long path form of a specified short input path
InBlock.gif        
/// </summary>

InBlock.gif        
/// <param name="shortName">The short name path</param>
ExpandedSubBlockEnd.gif        
/// <returns>A long name path string</returns>

InBlock.gif        public static string ToLongPathName(string shortName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
{
InBlock.gif            StringBuilder longNameBuffer 
= new StringBuilder(256
);
InBlock.gif            
uint bufferSize = (uint
)longNameBuffer.Capacity;
InBlock.gif
InBlock.gif            GetLongPathName(shortName, longNameBuffer, bufferSize);
InBlock.gif
InBlock.gif            
return
 longNameBuffer.ToString();
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// The ToLongPathNameToShortPathName function retrieves the short path form of a specified long input path
InBlock.gif        
/// </summary>

InBlock.gif        
/// <param name="longName">The long name path</param>
ExpandedSubBlockEnd.gif        
/// <returns>A short name path string</returns>

InBlock.gif        public static string ToShortPathName(string longName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
{
InBlock.gif            StringBuilder shortNameBuffer 
= new StringBuilder(256
);
InBlock.gif            
int bufferSize =
 shortNameBuffer.Capacity;
InBlock.gif
InBlock.gif            
int result =
 GetShortPathName(longName, shortNameBuffer, bufferSize);
InBlock.gif
InBlock.gif            
return
 shortNameBuffer.ToString();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

运行结果:
Current directory:
D:\Documents and Settings\Administrator\桌面\ShellPathNameConvert\ShellPathNameC
onvertTest\bin\Debug

Short path name:
D:\DOCUME~1\ADMINI~1\桌面\SHELLP~1\SHELLP~2\bin\Debug

Long path name:
D:\Documents and Settings\Administrator\桌面\ShellPathNameConvert\ShellPathNameC
onvertTest\bin\Debug

附带上作者的说明:
ShellPathNameConvert will allow you to convert to and from Long and Short paths. It's common for the Windows shell to send you a short path if your application takes command line arguments. However, it's not always convenient to work with the short path names and .NET provides no built in way to get the long path nam

这篇关于.net里长短文件名的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400689

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

笔记本电脑开机报错故障的原因及解决办法

笔记本电脑开机报错故障是指笔记本电脑开机自检时或启动操作系统前停止启动,在显示屏 出现一些错误提示的故障。   笔记本电脑开机报错故障的原因及解决办法   造成此类故障的原因一般是笔记本电脑在启动自检时,检测到硬件设备不能正常工作或在自 检通过后从硬盘启动时,出现硬盘的分区表损坏、硬盘主引导记录损坏、硬盘分区结束标志丢失 等故障,笔记本电脑出现相应的故障提示。   维修此类故障时

java读取resource/通过文件名获取文件类型

java读取resource java读取resource目录下文件的方法: 借助Guava库的Resource类 Resources.getResource("test.txt") 通过文件名获取文件类型 mongodb java

adb shell 执行后台程序后断开adb后台进程被结束的解决办法

环境:Android 版本 Android8 通常让程序后台执行就是在命令 最后加上 &即可,但是在Android 8上实验发现,程序的确后台了,但是拔掉USB线再连接上发现进程已结束。不确定Android早期版本是否存在此问题。 参考网上一些Linux方法,如加nohup 仍然无效,还是会结束。看来Android adb shell 与 Linux shell 还是有一定区别。 后来在网上