c#如何关联多个文件

Posted

技术标签:

【中文标题】c#如何关联多个文件【英文标题】:how to associate multiple files in c# 【发布时间】:2017-09-29 13:27:22 【问题描述】:

当我在我的计算机中选择多个文件并打开时,每个文件都会在我的应用程序中打开一个实例。在配置 Windows 应用程序以运行一个实例,但我的应用程序打开一个文件。如何打开选定的文件并在我的应用程序的列表框中添加地址文件。

程序.cs

static class Program

    [STAThread]
    static void Main(string[] args)
    
        if (args != null && args.Length > 0)
        
            string fileName = args[0];
            if (File.Exists(fileName))
            
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                Form1 MainFrom = new Form1();
                MainFrom.OpenFile(fileName);
                Application.Run(MainFrom);
            
            else
            
                MessageBox.Show("The file does not exist!", "BMPlayer Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            
        
        else
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        
    

Form.cs

        public void OpenFile(string filePath)
    
        string file1 = File.ReadAllText(filePath);
        axWindowsMediaPlayer1.URL = filePath;
    

此代码仅适用于一个文件。

【问题讨论】:

你有没有尝试过?您有与示例数据共享的代码吗?我不清楚你想达到什么目标。 另外,你不应该在句子的每个单词前加上大写字母。 我知道您的母语不是英语。让我尝试解决这个问题,请告诉它是否准确:在资源管理器中,您要选择多个文件。现在,如果您按 Enter 键,您希望您的应用程序以这些选定文件的列表打开,而不是每个选定文件的一个应用程序实例。您尝试配置您的应用程序,以便一次只能打开一个实例,这会导致只有一个实例具有一个来自所选文件的文件。对吗? 对于单个文件,它工作正常,但是当我尝试同时打开多个文件时,它会为每个单独的文件启动一个程序实例。 这不是我的问题@Fildor,我是从其他网站复制的。错误是因为那个 Pac0:) 【参考方案1】:

我不知道你的桌面项目是什么类型的,但是你可以在WinForms中使用下面的方法来做:

private void OpenFiles()
                
        using (var openFolderDialog = new OpenFileDialog  Multiselect = true )
        
            openFolderDialog.Filter = "csv files (*.csv)|*.csv|txt files (*.txt)|*.txt|All files (*.*)|*.*";

            if (openFolderDialog.ShowDialog() == DialogResult.OK
                && openFolderDialog.FileNames.All(x => !string.IsNullOrEmpty(x)))
            
                string[] files = openFolderDialog.FileNames;

                // TO DO: You can now loop over the selected files
                foreach(var fileName in files)
                
                    // Addyour logic here
                
            
        
    

使用 Windows Media Player 播放来自一个 WMP 单个进程的歌曲文件列表(如播放列表)的程序示例:

class Program

    [STAThread]
    static void Main(string[] args)
    
        string space = " ";
        string filePath1 = @"D:\mysong1.mp3";
        string filePath2 = @"D:\mysong2.mp3";            

        List<string> songFiles = new List<string>();
        songFiles.Add(filePath1);
        songFiles.Add(filePath2);            

        var playList = songFiles.Aggregate((a, b) => a + space + b);

        Process.Start("wmplayer.exe", playList);            
    

您可以使用以上两个代码的组合来完成您的需要。

【讨论】:

我不是说打开文件对话框项目。我的程序是一个音乐播放器,当你双击一首音乐时,它会播放得很好,但是当你选择多首歌曲时,程序在更多实例中打开歌曲 我不想在一个实例中选择和播放超过一首歌曲,就像播放列表一样。除了我知道如何在 c# 中创建播放列表:) 所以我的问题不是“如何创建播放列表” 我明白你的意思,但如果你需要更多帮助,你应该添加一些代码来准确指出问题所在。否则,我可以简单地告诉您使用上面的代码,并循环选择的音乐文件并实现 foreach 文件的逻辑以播放它并在完成时关闭它。 对象 axWindowsMediaPlayer1 是什么? 来自 com 组件。 WMP 对象。

以上是关于c#如何关联多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件扩展名关联到 C# 中的当前可执行文件

如何在 C# 中实现线程关联?

如何将常量与 C# 中的接口相关联?

c# 在运行时打开文件关联

如何拥有与公共数组成员关联的私有数据?

C# 运算符的优先级和关联性