Visual Studio 2019 как мне узнать, какие ссылки нужно импортировать и какие настройки пути - PullRequest
0 голосов
/ 18 июня 2020

Я создал проект Visual Studio 2019, который использует FileSystem.FileExists, а также StreamWriter и StreamReader. Я также создал папку с именем Resource с намерением создать в этой папке текстовый файл.

Зная, что мне нужно сообщить Writer и Reader, где найти файл, я использовал эти строки кода

Dim path As String = "C:/Users/Me/source/repos/TestForms/TestForms/Resource/"
If Not My.Computer.FileSystem.FileExists(path & "Check.txt") Then

Поскольку я не совсем понимаю, как работать с базой данных SQLite, но, допустим, я помещаю базу данных в папку Resource. И если я сделаю EXE-пакет, который будет работать на другом компьютере, этот строковый путь, по моему мнению, не сработает В процессе наклона я все время вижу эту строчку кода. Я не вижу пути к базе данных

m_dbConnection = New SQLiteConnection("Data Source=MyDatabase.sqlite; Version=3;")

Конечно, сейчас я имею дело с txt файлом, но если бы это был файл базы данных SQLite Мой вопрос: как соединение узнает, где находится база данных?

Мне также нужно импортировать эту ссылку Imports System.IO Исходя из NetBeans, меня испортил автоматический импорт

Второй вопрос: В VS 2019 нет функции автоматического импорта?

Я добавляю снимок экрана Solution Explore Пытался добавить папку ресурсов в Ресурсы, но это не помогло enter image description here

Код Stream Reader ниже без ошибок

    Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
    readDATA()
End Sub

Private Sub readDATA()
    Dim line As String
    Using reader As New StreamReader(path & "Check.txt", True)
        line = reader.ReadToEnd.Trim
        tbHaveOne.Text = line
    End Using
End Sub

Код, создающий Check.txt

    Private Sub frmThree_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    haveFILE()
    'tbHaveTwo.Text = frmOne.vR'KEEP see frmOne
    'tbHaveOne.Select()
End Sub

Public Sub haveFILE()
    'If My.Computer.FileSystem.FileExists(path & "Check.txt") Then
    '    MsgBox("File found.")
    'Else
    '    MsgBox("File not found.")
    'End If
    If Not My.Computer.FileSystem.FileExists(path & "Check.txt") Then
        ' Create or overwrite the file.
        Dim fs As FileStream = File.Create(path & "Check.txt")
        fs.Close()
        tbHaveTwo.Text = "File Created"
        tbHaveOne.Select()
    Else
        tbHaveTwo.Text = "File Found"
        tbHaveOne.Select()
    End If

End Sub

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вот рабочий код для создания текстового файла, если он не существует, и если он существует, пользователь получает уведомление. Мы также могли писать и читать из текстового файла. Одно из разочарований - мы не смогли использовать StreamReader.

Мы исправили эту ошибку, когда имя файла было создано как "Check.txtCheck.txt Эта строка кода ниже создала файл таким образом в папке Bin> Debug. Если не My.Computer.FileSystem.FileExists (filePath & "Check.txt"), то См. Код для правильного формата

Еще один БОЛЬШОЙ урок. НЕ создавайте папку и не помещайте текстовый файл в эту папку. Я не уверен, что использование кода «Использование» было хорошей идеей для дальнейшего исследования этой проблемы.

Рабочий код ниже

    Private Sub frmThree_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    haveFILE()
End Sub

Public Sub haveFILE()
    If Not System.IO.File.Exists(filePath) Then
        System.IO.File.Create(filePath).Dispose()
        tbHaveTwo.Text = "File Created"
        tbHaveOne.Select()
    Else
        My.Computer.FileSystem.FileExists(filePath) ' Then
        tbHaveTwo.Text = "File Found"
        tbHaveOne.Select()
    End If
    'This line of code created the File this was in the Bin > Debug folder Check.txtCheck.txt
    'If Not My.Computer.FileSystem.FileExists(filePath & "Check.txt") Then

End Sub
Sub PlaySystemSound()
    My.Computer.Audio.PlaySystemSound(
    System.Media.SystemSounds.Hand)
End Sub
Private Sub btnWrite_Click(sender As Object, e As EventArgs) Handles btnWrite.Click
    If tbHaveOne.Text = "" Then
        PlaySystemSound()
        'MsgBox("Please enter a username.", vbOKOnly, "Required Data")
        'If MsgBoxResult.Ok Then
        '    Return
        'End If
        Const Title As String = "To EXIT Click OK"
        Const Style = vbQuestion
        Const Msg As String = "Enter Data" + vbCrLf + vbNewLine + "Then Write Data"
        Dim result = MsgBox(Msg, Style, Title)
        If result = vbOK Then
            'MsgBox("Enter Data")

            tbHaveOne.Select()
            Return
        End If
    End If
    writeDATA()
End Sub

Private Sub writeDATA()
    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter(filePath, True)
    file.WriteLine(tbHaveOne.Text)
    file.Close()
    tbHaveOne.Clear()
    tbHaveTwo.Text = "Data Written"
End Sub

Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
    readDATA()
End Sub

Public Sub readDATA()
    Dim fileReader As String
    fileReader = My.Computer.FileSystem.ReadAllText(filePath)
    tbHaveOne.Text = fileReader
End Sub
1 голос
/ 18 июня 2020

Практически никогда не следует жестко программировать абсолютные пути. Если вы хотите сослаться на путь в папке программы, тогда вы используете Application.StartupPath как root и относительный путь, например,

Dim filePath = Path.Combine(Application.StartupPath, "Resource\Check.txt")

Тогда неважно, откуда вы запускаете свою программу. . Для других стандартных путей к папкам следует использовать Environment.GetFolderPath или My.Computer.FileSystem.SpecialDirectories. Для нестандартных путей вы должны позволить пользователю выбрать FolderBrowserDialog, OpenFileDialog или SaveFileDialog, а затем, при необходимости, сохранить этот путь в настройках или тому подобном.

Когда это произойдет для строк подключения к базе данных некоторые поставщики ADO. NET поддерживают использование "| DataDirectory |" в пути к файлу данных, который заменяется во время выполнения. Чем его заменить, зависит от типа приложения и способа его развертывания. Для приложений веб-форм он разрешается в папку App_Data . Для приложений ClickOnce Windows он разрешается в специальную папку данных. Для других приложений Windows он разрешается в папку программы, как и Application.StartupPath. Я думаю, что поставщик SQLite поддерживает это, но я не уверен на 100%. Если это так, вы можете использовать что-то вроде этого:

m_dbConnection = New SQLiteConnection("Data Source=|DataDirectory|\Resource\MyDatabase.sqlite; Version=3;")

EDIT:

Если вы добавляете файлы данных в свой проект в обозревателе решений и хотите, чтобы они были частью развернутого приложения, вам необходимо настроить их, чтобы это произошло. Выберите файл в обозревателе решений, а затем установите для Build Action значение Content, а для свойства Copy to Output Directory значение Copy Always или, если вы собираетесь внести изменения в файл во время работы приложения, Copy if Newer.

При сборке этот файл будет скопирован из исходной папки проекта в выходную папку вместе с EXE. Затем вы можете получить к нему доступ, используя Application.StartupPath во время выполнения. Это означает, что во время отладки, а также после развертывания, он будет скопирован в выходную папку «\ bin \ Release», а также в выходную папку «\ bin \ Debug». Если вы добавите файл в папку в обозревателе решений, этот файл будет скопирован, поэтому я сказал ранее, что использовать его:

Dim filePath = Path.Combine(Application.StartupPath, "Resource\Check.txt")
...