c语言用结构体编写一个完整的函数,完成从一个给定的完整的文件路径 (如”C:\My Documents\Software Test 1.00.doc”)中,析取文件名,扩展名和文件所处目录的功能
时间: 2024-02-12 07:07:59 浏览: 34
好的,以下是一个用结构体编写的C语言函数,可以从一个给定的完整的文件路径中析取文件名、扩展名和文件所处目录。
```c
#include <stdio.h>
#include <string.h>
// 定义一个结构体,用于存储文件信息
struct FileInfo {
char dir[256]; // 文件所处目录
char name[256]; // 文件名
char ext[256]; // 扩展名
};
// 根据文件路径析取文件信息
void get_file_info(const char* path, struct FileInfo* info) {
char* p = strrchr(path, '\\'); // 找到最后一个反斜杠
if (p == NULL) {
strcpy(info->dir, ""); // 如果没有反斜杠,则表示文件在当前目录下
p = (char*)path;
}
else {
strncpy(info->dir, path, p - path + 1); // 复制目录部分
info->dir[p - path + 1] = '\0'; // 加上字符串结束符
p++; // 指向文件名部分
}
char* q = strrchr(p, '.'); // 找到最后一个点
if (q == NULL) {
strcpy(info->name, p); // 如果没有点,则表示没有扩展名
strcpy(info->ext, "");
}
else {
strncpy(info->name, p, q - p); // 复制文件名部分
info->name[q - p] = '\0'; // 加上字符串结束符
strcpy(info->ext, q + 1); // 复制扩展名部分
}
}
int main() {
char path[256] = "C:\\My Documents\\Software Test 1.00.doc";
struct FileInfo info;
get_file_info(path, &info);
printf("dir: %s\n", info.dir);
printf("name: %s\n", info.name);
printf("ext: %s\n", info.ext);
return 0;
}
```
这个函数首先找到最后一个反斜杠,将其前面的部分作为文件所处目录,将其后面的部分作为文件名。然后再找到最后一个点,将其前面的部分作为文件名,将其后面的部分作为扩展名。最后将这些信息存储在一个结构体中,并返回给调用者。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)