ofn结构及多个文件的打开

下面的代码演示了如何得到GetOpenFileName允许多选的情况下选择的文件名
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[80*MAX_PATH];
TCHAR szPath[MAX_PATH];
TCHAR szFileName[80*MAX_PATH];
TCHAR* p;
int nLen = 0;
ZeroMemory( &ofn, sizeof(ofn) );
ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT;
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[0] = '\0';
ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
if( GetOpenFileName( &ofn ) )

  //把第一个文件名前的复制到szPath,即:
  //如果只选了一个文件,就复制到最后一个'\'
  //如果选了多个文件,就复制到第一个NULL字符
  lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset );
  //当只选了一个文件时,下面这个NULL字符是必需的.
  //这里不区别对待选了一个和多个文件的情况
  szPath[ ofn.nFileOffset ] = '\0';
  nLen = lstrlen(szPath);
 
  if( szPath[nLen-1] != '\\' )   //如果选了多个文件,则必须加上'\\'
  {
   lstrcat(szPath, TEXT("\\"));
  }
 
  p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
 
  ZeroMemory(szFileName, sizeof(szFileName));
  while( *p )
  {  
   lstrcat(szFileName, szPath);  //给文件名加上路径 
   lstrcat(szFileName, p);    //加上文件名 
   lstrcat(szFileName, TEXT("\n")); //换行  
   p += lstrlen(p) +1;     //移至下一个文件
  }
  MessageBox(NULL, szFileName, TEXT("MultiSelect"), MB_OK);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Linux 系统中,可以使用 C 语言来编写一个简单的多用户文件系统模拟程序。下面是一个示例代码: #include <stdio.h> #include <string.h> #include <pthread.h> #define MAX_USERS 10 // 最大用户数 #define MAX_FILES 50 // 最大文件数 // 文件信息结构体 typedef struct FileInfo { char name[32]; // 文件名 int owner; // 文件所有者编号 int size; // 文件大小 char content[1024]; // 文件内容 } FileInfo; // 用户信息结构体 typedef struct UserInfo { char name[32]; // 用户名 int id; // 用户编号 } UserInfo; // 多用户文件系统结构体 typedef struct MultiUserFileSystem { FileInfo files[MAX_FILES]; // 文件数组 UserInfo users[MAX_USERS]; // 用户数组 pthread_mutex_t mutex; // 互斥锁 } MultiUserFileSystem; // 初始化多用户文件系统 void InitMultiUserFileSystem(MultiUserFileSystem* mufs) { // 初始化文件数组 for (int i = 0; i < MAX_FILES; i++) { strcpy(mufs->files[i].name, ""); mufs->files[i].owner = -1; mufs->files[i].size = 0; strcpy(mufs->files[i].content, ""); } // 初始化用户数组 for (int i = 0; i < MAX_USERS; i++) { strcpy(mufs->users[i].name, ""); mufs->users[i].id = -1; } // 初始化互斥锁 pthread_mutex_init(&mufs->mutex, NULL); } // 销毁多用户文件系统 void DestroyMultiUserFileSystem(MultiUserFileSystem* mufs) { // 销毁互斥锁 ### 回答2: 下面是一个简单的多用户文件系统的模拟C语言代码: #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义文件结构 typedef struct { char filename[20]; int permission; } File; // 定义用户结构 typedef struct { char username[20]; File files[10]; int fileCount; } User; // 初始化文件系统 void initFileSystem(User users[], int userCount) { for (int i = 0; i < userCount; i++) { strcpy(users[i].username, ""); users[i].fileCount = 0; } } // 创建新用户 int createUser(User users[], int userCount, char username[]) { for (int i = 0; i < userCount; i++) { if (strcmp(users[i].username, "") == 0) { strcpy(users[i].username, username); users[i].fileCount = 0; return i; } } return -1; } // 创建新文件 int createFile(User* user, char filename[], int permission) { if (user->fileCount >= 10) { return -1; } File* file = &(user->files[user->fileCount]); strcpy(file->filename, filename); file->permission = permission; user->fileCount++; return 0; } // 测试例子 int main() { User users[10]; initFileSystem(users, 10); int userId1 = createUser(users, 10, "user1"); int userId2 = createUser(users, 10, "user2"); printf("Created users: %s, %s\n", users[userId1].username, users[userId2].username); createFile(&(users[userId1]), "file1.txt", 0); createFile(&(users[userId2]), "file2.txt", 1); printf("%s's files: \n", users[userId1].username); for (int i = 0; i < users[userId1].fileCount; i++) { printf("%s\n", users[userId1].files[i].filename); } printf("%s's files: \n", users[userId2].username); for (int i = 0; i < users[userId2].fileCount; i++) { printf("%s\n", users[userId2].files[i].filename); } return 0; } 这段代码模拟了一个简单的多用户文件系统。它使用了两个结构体来表示用户和文件,用户可以创建文件,并可以查看自己所拥有的文件。在这个模拟中,文件系统最多可以容纳10个用户,并且每个用户最多可以拥有10个文件。 ### 回答3: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdbool.h> #define MAX_USERS 10 #define MAX_FILES 10 #define MAX_FILENAME_LENGTH 20 #define MAX_CONTENT_LENGTH 100 typedef struct { char username[20]; char password[20]; } User; typedef struct { char filename[MAX_FILENAME_LENGTH]; char content[MAX_CONTENT_LENGTH]; } File; typedef struct { User users[MAX_USERS]; File files[MAX_FILES]; int userCount; int fileCount; } FileSystem; void initialize(FileSystem* fs) { fs->userCount = 0; fs->fileCount = 0; } void createUser(FileSystem* fs, const char* username, const char* password) { if (fs->userCount == MAX_USERS) { printf("Maximum number of users reached.\n"); return; } User newUser; strcpy(newUser.username, username); strcpy(newUser.password, password); fs->users[fs->userCount] = newUser; fs->userCount++; } void createFile(FileSystem* fs, const char* filename) { if (fs->fileCount == MAX_FILES) { printf("Maximum number of files reached.\n"); return; } File newFile; strcpy(newFile.filename, filename); strcpy(newFile.content, ""); fs->files[fs->fileCount] = newFile; fs->fileCount++; } bool authenticate(User* user, const char* password) { return strcmp(user->password, password) == 0; } File* openFile(FileSystem* fs, const char* filename) { for (int i = 0; i < fs->fileCount; i++) { if (strcmp(fs->files[i].filename, filename) == 0) { return &(fs->files[i]); } } printf("File not found.\n"); return NULL; } void writeFile(File* file, const char* content) { strcpy(file->content, content); } void readFile(File* file) { printf("File content: %s\n", file->content); } int main() { FileSystem fs; initialize(&fs); createUser(&fs, "user1", "pass1"); createUser(&fs, "user2", "pass2"); createFile(&fs, "file1.txt"); createFile(&fs, "file2.txt"); User* currentUser = &(fs.users[1]); if (authenticate(currentUser, "pass2")) { File* currentFile = openFile(&fs, "file2.txt"); writeFile(currentFile, "Hello, world!"); readFile(currentFile); } return 0; } ``` 这段代码是一个简单的多用户文件系统的模拟代码,其中包含了创建用户、创建文件文件认证、打开文件、读写文件等功能。通过使用结构体来表示用户和文件,以及使用数组来保存多个用户和文件,实现了一个简单的多用户文件系统的模拟。在 `main` 函数中对这些功能进行了测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值