单击按钮后打开或关闭文件时显示消息

问题描述 投票:0回答:1

我有一个 UserControl 和 ViewModel,在单击 CheckConfigurationCommand 按钮后它需要显示一条消息(TextBlock)。消息的内容取决于 nameFile.config 文件是否打开。如果文件已打开,则单击按钮后,应显示消息:“打开的文件:带 DC 的 nameFile.config 已打开。”。 如果文件未打开,则消息应显示:“打开的文件:带 DC 的 nameFile.config 未打开。”。

使用我的代码,它只显示一条消息,文件已打开,但文件未打开,你能告诉我错误在哪里吗?

这是我的 XAML 和 ViewModel:

XAML:

<UserControl x:Class="PTC_Konfiguration.View.ConfigurationReviewUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:PTC_Konfiguration.View"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBlock Text="Opened File:" />
            <TextBlock Text="{Binding OpenedFilePath}" FontWeight="Bold" FontSize="16" />
            <Button Content="Check Configuration" Command="{Binding CheckConfigurationCommand}" />
        </StackPanel>
    </Grid>
</UserControl>

视图模型:

private string openedFilePath;

        public event PropertyChangedEventHandler PropertyChanged;

        public string OpenedFilePath
        {
            get { return openedFilePath; }
            set
            {
                if (openedFilePath != value)
                {
                    openedFilePath = value;
                    OnPropertyChanged();
                }
            }
        }

        public ICommand CheckConfigurationCommand { get; }

        public ConfigurationReviewViewModel()
        {
            CheckConfigurationCommand = new RelayCommand(CheckConfiguration);
        }

        private void CheckConfiguration()
        {
            string filePath = @"C:\Users\Path";

            if (FileIsOpen(filePath))
            {
                OpenedFilePath = "Opened File: The nameFile.config with DC is open.";
            }
            else if (FileIsNotOpen(filePath))
            {
                OpenedFilePath = "Opened File: The nameFile.config with DC is not open.";
            }
        }

        private bool FileIsOpen(string filePath)
        {
            return File.Exists(filePath);
        }

        private bool FileIsNotOpen(string filePath)
        {
            try
            {
                using (FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    fs.Close();
                    return false;
                }
            }
            catch (IOException)
            {
                return true;
            }
        }

        private void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
c# wpf viewmodel
1个回答
0
投票

File.Exists()
方法中写的
FileIsOpen()
方法是检查文件是否存在的方法。

如果我没理解错的话,

FileIsOpen()
想要判断是否因为文件打开而出现死锁。

没有理由有两种方法。我认为你只需要反转

FileIsNotOpen()
方法中的返回值即可。

我觉得一个

IF
就够了。

  private void CheckConfiguration()
        {
            string filePath = @"C:\Users\Path";

            if (FileIsOpen(filePath))
            {
                OpenedFilePath = "Opened File: The nameFile.config with DC is open.";
            }
            else
            {
                OpenedFilePath = "Opened File: The nameFile.config with DC is not open.";
            }
        }

        private bool FileIsOpen(string filePath)
        {
            try
            {
                using (FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    fs.Close();
                }
            }
            catch (IOException)
            {
                return false;
            }
            return true;
        }

我希望这是您想要的功能。

© www.soinside.com 2019 - 2024. All rights reserved.