JeezyWonder Ответов: 2

Откройте файл .txt с различными именами жестких дисков


Что я пытаюсь его открыть текстовый файл вот так:
Dim FILE_NAME As String = "C:\FileName.txt"

If System.IO.File.Exists(FILE_NAME) = True Then
    Process.Start(FILE_NAME)
Else
    MsgBox("File Does Not Exist")
End If

Но проблема в том, что, когда я даю свой файл .exe с этими файлами другому пользователю, у него может быть другое имя жесткого диска, D: кроме C: например.. поэтому это:
"C:\FileName.txt"
не найдет файл. Мне не нужен openfiledialog. Как ее решить? Было бы лучше, если бы я мог поместить файл .txt в ту же папку, что и файл .exe, и некоторые cmd будут знать, что он должен открывать файл только из этой папки.. просто догадываюсь... спасибо в дальнейшем

Что я уже пробовал:

Dim FILE_NAME As String = "C:\FileName.txt"

If System.IO.File.Exists(FILE_NAME) = True Then
    Process.Start(FILE_NAME)
Else
    MsgBox("File Does Not Exist")
End If

2 Ответов

Рейтинг:
10

RickZeeland

Чтобы получить системный диск в C#, вы можете использовать:

var p = System.IO.Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
В Vb.NET:
Dim p = System.IO.Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))
Чтобы получить путь, где находится exe-файл:
Dim strPath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
Однако вам придется удалить начало строки "file:\\".


JeezyWonder

Значит, "п" будет содержать информацию о системном диске? как им пользоваться?
Dim FILE_NAME As String = "C:\FileName.txt"

RickZeeland

Это будет строка, содержащая букву диска, например "D:".
Просто соединитесь с вашим именем файла, или лучше: используйте Path.Объединять()

JeezyWonder

Dim FILE_NAME As String = p + "\FileName.txt " - сработает?

RickZeeland

Просто попробуйте не бояться :) может быть, вам не нужно использовать '\' в имени файла, поэтому лучше использовать Path.Combine (), который добавит это автоматически, если это необходимо.

JeezyWonder

Большое спасибо, еще одно qeustion, проблема диска решена с вашей предоставленной помощью, но как решить проблему пути к папке? Пользователь может извлечь мою папку с моими файлами. exe и. txt только на "C:\" или на "C:\Detskop-или еще одна папка на диске С, большое спасибо

RickZeeland

Если файлы. exe и. txt находятся в одном месте, вам вообще не нужен путь, просто используйте голое имя файла !

JeezyWonder

gooood, его хотят, чтобы я искал, большое спасибо, сэр

JeezyWonder

чтобы быть уверенным, это будет выглядеть так: Dim FILE_NAME As String = "\FileName.txt"?

RickZeeland

Близко, но вам не нужна обратная косая черта.

Рейтинг:
1

OriginalGriff

Используйте файл конфигурации: Управление настройками приложения (.NET)[^]


JeezyWonder

Это использование app. config?

OriginalGriff

Да-ссылка действительно говорит об этом.

JeezyWonder

очень жаль, что mdsn не предоставляет слишком много примеров кода с "текстовыми файлами конфигурации", честно говоря, не могу понять смысл app. config

OriginalGriff

Это потому что код тривиален:
Dim myString as String = свойства.Настройки.По умолчанию.MyStringSetting
...
Свойства.Настройки.По умолчанию.MyStringSetting = myNewStringValue
Свойства.Настройки.По умолчанию.Сохранить()

Данные хранятся в XML-файле, поэтому их легко редактировать вне приложения, Если вам это нужно.

JeezyWonder

Да, не могли бы вы быть так любезны привести пример того, как назначить 8000 символов(сейчас они у меня есть в текстовом файле, так что я просто скопирую) в строку app.config? а потом получить его от него, когда он мне понадобится в коде, вот так? :
Dim myString as String = свойства.Настройки.По умолчанию.MyStringSetting
myString = ' 8000 символов здесь
Свойства.Настройки.По умолчанию.MyStringSetting = myNewStringValue
Свойства.Настройки.По умолчанию.Сохранить()
(тогда он будет сохранен в xml, как я понимаю? а как получить символы обратно из xml и назначить их новому var?)

OriginalGriff

myString = ' 8000 символов здесь
Свойства.Настройки.По умолчанию.MyStringSetting = mystring совсем
Свойства.Настройки.По умолчанию.Сохранить()

OriginalGriff

Но я бы сделал это так, чтобы сохранить путь к файлу в конфигурационном файле, а не содержимое файла.

JeezyWonder

Ок, а как вам, что спасли 8000 символов обратно по назначению, чтобы новый ВАР?

JeezyWonder

"я бы сделал это так, чтобы сохранить путь к файлу в конфигурационном файле, а не содержимое файла." Кажется, я понимаю, но не могли бы вы показать простой пример, пожалуйста

OriginalGriff

Да ладно тебе!
Путь - это просто струна, ты же знаешь. Поэтому просто замените "myString" на путь к вашему файлу...