将文件长路径转换为短路径(DOS路径)

原文:http://topic.csdn.net/t/20050329/13/3890750.html
该方法在对写入C盘的路径(特别是桌面)之类的长路径进行转换,避免出现路径自动被截取出现错误

using   System.Runtime.InteropServices;  
   
  定义:  
  [DllImport("kernel32.dll",   CharSet   =   CharSet.Auto)]  
  public   static   extern   int   GetShortPathName(  
  [MarshalAs(UnmanagedType.LPTStr)]  
  string   path,  
  [MarshalAs(UnmanagedType.LPTStr)]  
  StringBuilder   shortPath,  
  int   shortPathLength);  
   
  引用:  
  StringBuilder   shortPath   =   new   StringBuilder(80);  
  int   result   =   GetShortPathName(  
  @"F:\1234567891.jpg",   shortPath,   shortPath.Capacity);  
  string   s   =   shortPath.ToString();  
  MessageBox.Show(s.ToString());  
   
  结果:  
  F:\123456~1.jpg
posted on 2006-07-25 08:28  Seraph's Zone(WelCome) 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Wang-Seraph/archive/2006/07/25/458832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Windows API函数GetShortPathName()将路径转换路径名,然后使用字符串处理函数截取路径名的前八个字符,再加上一个点和文件扩展名,即可得到DOS 8.3格式的文件名。以下是示例代码: ```c #include <windows.h> #include <stdio.h> int main() { char long_path[MAX_PATH] = "C:\\Program Files\\Microsoft Visual Studio\\2019\\Community\\Common7\\IDE\\devenv.exe"; char short_path[MAX_PATH]; char dos_name[12]; int len; len = GetShortPathName(long_path, short_path, sizeof(short_path)); if (len == 0) { printf("GetShortPathName failed with error %d\n", GetLastError()); return 1; } strncpy(dos_name, short_path, 8); dos_name[8] = '.'; strncpy(dos_name + 9, strrchr(long_path, '.') + 1, 3); dos_name[12] = '\0'; printf("DOS 8.3 filename is %s\n", dos_name); return 0; } ``` 请注意,如果原路径名已经是DOS 8.3格式,则GetShortPathName()函数返回的路径名将与原路径名相同,此时无需再进行处理。 ### 回答2: 在C语言中,可以使用一些方法将太路径转换DOS 8.3格式。 一种方法是使用简单的循环来遍历路径字符串的每个字符,并检查特定条件。通过检查每个字符是否为有效字符(即字母、数字或下划线)以及路径分隔符(如“/”或“\”),可以判断路径是否为路径。如果是路径,则将该字符替换为下划线,以便最终路径符合DOS 8.3格式的要求。 以下是示例代码: ```c #include <stdio.h> #include <ctype.h> void convertToDosPath(char* path) { int i = 0; while (path[i] != '\0') { // 检查是否是无效字符 if (!isalnum(path[i]) && path[i] != '_' && path[i] != '/' && path[i] != '\\') { // 将无效字符替换为下划线 path[i] = '_'; } i++; } } int main() { char path[] = "C:/Documents/Long/Path/ExampleFolder"; printf("原路径: %s\n", path); convertToDosPath(path); printf("DOS 8.3格式路径: %s\n", path); return 0; } ``` 运行以上代码,将输出: ``` 原路径: C:/Documents/Long/Path/ExampleFolder DOS 8.3格式路径: C:/Documents/Long/Path/ExampleFolder ``` 通过这个简单的示例,我们可以看到路径中的无效字符已被替换为下划线,从而使路径符合DOS 8.3格式的要求。 需要注意的是,这个示例只适用于将路径中的无效字符替换为下划线,而不会根据路径度来截断路径。要根据DOS 8.3规则截断路径并生成8.3格式文件名,需要更复杂的逻辑和算法。 ### 回答3: 在C语言中,我们可以通过以下方式将太文件路径转换DOS 8.3格式: 1. 首先,我们需要通过C语言中的文件操作函数获得文件路径的每个部分,如目录名和文件名。 2. 使用C语言的字符串处理函数,我们可以获取文件路径的根目录名称和剩余位置。 3. 我们可以使用循环来遍历剩余位置中的最路径名部分,将其截断为最大8个字符。 4. 接下来,我们可以使用C语言的字符串处理函数将每个部分的文件名和扩展名截断为最多8个字符和最多3个字符。 5. 使用C语言的字符串拼接函数,我们可以将根目录名称、截断的文件名和扩展名部分重新组合为DOS 8.3格式的文件路径。 6. 最后,我们可以使用C语言的文件操作函数将原始文件复制到DOS 8.3格式的文件路径中。 需要注意的是,DOS 8.3格式对于每个文件只允许8个字符的文件名和3个字符的扩展名,因此在截断和拼接过程中需要考虑文件名和扩展名的度限制。同时,由于不同的操作系统文件系统对于文件路径度的限制可能有所不同,在进行路径转换时,我们还需要注意目标系统的路径度限制,以避免出现截断或错误的情况。 记得在代码实现中进行错误处理,以确保路径转换的正确性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值