Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Error '52' Bad File name or number Добавлено: 31.07.07 21:28  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
Сравнение скорости, это конечно - хорошо, но вернусь к своим баранам==DD

Пишу в файл произволного доступа:
Private Sub SaveToFile(ByVal Patth As String)
    'ïèøåì ôàéë äàííûõ
    Dim Fl As Integer
    Fl = FreeFile
    
    Open Patth For Random As #Fl Len = Len(kk(1, 1))
    
        Dim k As Integer, i As Integer, j As Integer
        For i = 1 To 4
            For j = 1 To 4
                
                
                If Grid1.TextArray(Grid1.GetCellIndex(i, j)) = "" Then _
                Grid1.TextArray(Grid1.GetCellIndex(i, j)) = "0"
                kk(i, j) = Grid1.TextArray(Grid1.GetCellIndex(i, j))
                k = k + 1
                Put #Fl, k, kk(i, j)
            Next j
        Next i

        For i = 1 To 4
            For j = 1 To 7
                If Grid2.TextArray(Grid2.GetCellIndex(i, j - 1)) = "" Then _
                Grid2.TextArray(Grid2.GetCellIndex(i, j - 1)) = "0"
                FF(i, j) = Grid2.TextArray(Grid2.GetCellIndex(i, j - 1))
                k = k + 1
                Put #Fl, k, FF(i, j)
            Next j
        Next i
        
        For i = 1 To 2
            For j = 1 To 5
                If Grid3.TextArray(Grid3.GetCellIndex(i, j - 1)) = "" Then _
                Grid3.TextArray(Grid3.GetCellIndex(i, j - 1)) = "0"
                N1(i, j) = Grid3.TextArray(Grid3.GetCellIndex(i, j - 1))
                k = k + 1
                Put #Fl, k, N1(i, j)
            Next j
        Next i
        
        For i = 1 To 2
            For j = 1 To 5
                If Grid4.TextArray(Grid4.GetCellIndex(i, j - 1)) = "" Then _
                Grid4.TextArray(Grid4.GetCellIndex(i, j - 1)) = "0"
                N2(i, j) = Grid4.TextArray(Grid4.GetCellIndex(i, j - 1))
                k = k + 1
                Put #Fl, k, N2(i, j)
            Next j
        Next i

        For i = 1 To 9
            For j = 1 To 1
                If Grid5.TextArray(Grid5.GetCellIndex(i - 1, j)) = "" Then _
                Grid5.TextArray(Grid5.GetCellIndex(i - 1, j)) = "0"
                k = k + 1
                D(i, j) = Grid5.TextArray(Grid5.GetCellIndex(i - 1, j))
                Put #Fl, k, D(i, j)
            Next j
        Next i
        
    Close #Fl

End Sub
если Path - путь к существующему файлу и я просто при дебаге ей воспользуюсь - все правильно, ошибки не возникает

но если обращаюсь во:

        MsgBox Command 'for check
        Call SaveToFile(Command)

когда открываю программу через какой-то файл и передаю в качестве параметра значение коммандной строки, то появляется ошибка:
Error '52' Bad File name or number

пораскиув мозгами, я пришел к выводу, что так как файл открыт и у нему идет обращение второй раз - вот и возникает ошибка...

Собственно, к такому же выводу пришел и гугл:
http://support.microsoft.com/kb/214674
The file number created when a file is opened cannot be shared between separate projects or executable modules.


The file number created when a file is opened cannot be shared between separate projects or executable modules.
причина вроде ясна, но как ее обойти, я не нашел

Как правильно выйти из этой ситуации?

Заранее спасибо!

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 Виктор M



ICQ: 175861300 

Вопросов: 1
Ответов: 12
 Профиль | | #1 Добавлено: 31.07.07 22:42
А Command какую строку содержит?

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 31.07.07 23:22
cтроку файла, я специально проверку делал:
но если обращаюсь во:

 
        MsgBox Command 'for check
        Call SaveToFile(Command)


когда открываю программу через какой-то файл и передаю в качестве параметра значение коммандной строки, то появляется ошибка:
msgbox показывает абсолютно четкий путь к файлу. Если его открыть в режиме дебаг тот же путь - открывает

Ответить

Номер ответа: 3
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #3 Добавлено: 31.07.07 23:31
пораскиув мозгами, я пришел к выводу, что так как файл открыт и у нему идет обращение второй раз - вот и возникает ошибка...
Почему он оказывается открыт? Ведь ты только в процедуре SaveToFile его открываешь. Или еще где-то?

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 01.08.07 00:07
он открывается тогда, когда я по нему кликаю, по умолчанию с этим файлом открывается моя программа и в процедуре Form_load я считываю с него данные, (по кр. мере пытаюсь)).

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

Ответить

Номер ответа: 5
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #5 Добавлено: 01.08.07 01:23
Если ты его открыл в Form_Load, то там же должен его закрыть, либо в SaveToFile использовать тот же идентификатор, какой ты получил в Form_Load.

Ответить

Номер ответа: 6
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #6
Добавлено: 01.08.07 16:22
Если ты его открыл в Form_Load, то там же должен его закрыть, либо в SaveToFile использовать тот же идентификатор, какой ты получил в Form_Load.
я его не открывал в form_load, SaveToFile - его первое открытие

Private Sub Form_Load()
    ReDim D(9, 1) As Single
    With Grid1
        .col = 0
        .row = 0
        .Text = "Íàçâàíèå ãðóíòà"
        .row = 1
        .Text = "Ïåñîê ïûëåâàòûé"
        .row = 2
        .Text = "Cóïåñü ïëàñòè÷íàÿ"
        .row = 3
        .Text = "Ïåñîê ìåëêèé"
        .row = 4
        .Text = "Ñóãëèíîê ìÿãêîïëàñò."
        .row = 0
        .col = 1
        .Text = "×èñëî ïëàñòè÷íîñòè"
        .col = 2
        .Text = "Ïîêàçàòåëü òåêó÷åñòè"
        .col = 3
        .Text = "Êîýôôèöèåíò ïîð."
        .col = 4
        .Text = "Ìîùíîñòü ñëîÿ, ì."
        
    End With
    
    With Grid2

        .row = 0
        .col = 0
        .Text = "Ýëåìåíò"
        .col = 1
        .Text = "Âåñ ýëåìåíòà"
        .col = 2
        .Text = "Êîëè÷åñòâî"
        .col = 3
        .Text = "Âûñîòà ýëåìåíòà"
        .col = 4
        .Text = "Øèðèíà"
        .col = 5
        .Text = "Äëèíà"
        .col = 6
        .Text = "Îáúåì"

    End With
    
    With Grid3
    
        .TextArray(.GetCellIndex(0, 0)) = "Íîìåð ðåæèìà"
        .TextArray(.GetCellIndex(0, 1)) = "Ðåæèì"
        .TextArray(.GetCellIndex(0, 2)) = "Íàãðóçêà ïî îñè 1"
        .TextArray(.GetCellIndex(0, 3)) = "Íàãðóçêà ïî îñè 2"
        .TextArray(.GetCellIndex(0, 4)) = "Íàãðóçêà ïî îñè 3"
    
    End With
    
    With Grid4
    
        .TextArray(.GetCellIndex(0, 0)) = "Íîìåð ðåæèìà"
        .TextArray(.GetCellIndex(0, 1)) = "Ðåæèì"
        .TextArray(.GetCellIndex(0, 2)) = "Íàãðóçêà ïî îñè 1"
        .TextArray(.GetCellIndex(0, 3)) = "Íàãðóçêà ïî îñè 2"
        .TextArray(.GetCellIndex(0, 4)) = "Íàãðóçêà ïî îñè 3"
    
    End With
    
    With Grid5
        
        .ColWidth(0) = 2200
        .ColWidth(1) = 1000
        .Width = .ColWidth(0) + .ColWidth(1) + 100
        .TextArray(.GetCellIndex(0, 0)) = "Òèï îïîðû"
        .TextArray(.GetCellIndex(1, 0)) = "Áàçà âäîëü îñè 1"
        .TextArray(.GetCellIndex(2, 0)) = "Áàçà âäîëü îñè 2"
        .TextArray(.GetCellIndex(3, 0)) = "Óãîë ëîê. è ãëîá. îñåé"
        .TextArray(.GetCellIndex(4, 0)) = "Hw"
        .TextArray(.GetCellIndex(5, 0)) = "Âûñîòà áàíêåòêè, Hb"
        .TextArray(.GetCellIndex(6, 0)) = "Gb"
        .TextArray(.GetCellIndex(7, 0)) = "Go"
        .TextArray(.GetCellIndex(8, 0)) = "Yo"
    
    End With
    
    '÷èòàåì èç ôàéëà äàííûõ
    ;Dim Fl As Byte:
    ;Dim i As Integer, j As Integer, k As Integer
    ;Dim dArr(9, 2) As Single
    If Command = "" Then
        'Save
    Else
        MsgBox Command 'for check
        Call SaveToFile(Command)

    End If
    
    For i = 1 To 4
        Grid1.ColWidth(i) = 2850
    Next i
    Grid1.ColWidth(0) = 2850
    Grid1.Width = 2850 * 5 + 100
    Grid1.Height = 1550
    
    For i = 1 To Grid2.Cols - 1
        Grid2.ColWidth(i) = 14350 / Grid2.Cols
    Next i
    Grid2.ColWidth(0) = 2500
    Grid2.ColWidth(2) = 2500
    Grid2.ColWidth(6) = 1500
    Grid2.ColWidth(5) = 1500
    Grid2.Width = 14350 / Grid2.Cols * Grid2.Cols + 100
    Grid2.Height = 1550
    
    For i = 0 To Grid3.Cols - 1
        Grid3.ColWidth(i) = 10000 / Grid3.Cols
    Next i
    Grid3.Width = Grid3.ColWidth(1) * 5 + 100
    Grid3.Height = 1000

    For i = 0 To Grid4.Cols - 1
        Grid4.ColWidth(i) = 10000 / Grid4.Cols
    Next i
    Grid4.Width = Grid4.ColWidth(1) * 5 + 100
    Grid4.Height = 1000
End Sub

Ответить

Номер ответа: 7
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #7 Добавлено: 01.08.07 18:10
Это, вероятно, потому, что в command передается название файла в кавычках — их надо убрать перед открытием файла.

Ответить

Номер ответа: 8
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #8
Добавлено: 01.08.07 18:43
ухты, и правда!

Спасибо, shuffle, ты молодец!

Ответить

Номер ответа: 9
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #9
Добавлено: 06.08.07 19:53
Command - это, вроде, команда, которую посылает винда когда открывается прога. Например если открывать файл с помощью твоей проги, то в Command будет содержаться путь к файлу (в ковычках)

Ответить

Номер ответа: 10
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #10 Добавлено: 06.08.07 22:41
Command - это, вроде, команда, которую посылает винда когда открывается прога. Например если открывать файл с помощью твоей проги, то в Command будет содержаться путь к файлу (в ковычках)
Когда прога открывается без параметров, command будет пустым. И к тому же, если передавать в качестве параметра путь к файлу без кавычек, то в command он будет тоже без них.

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 07.08.07 00:02
И к тому же, если передавать в качестве параметра путь к файлу без кавычек, то в command он будет тоже без них.
То есть? В каких случаях он возвращает путь с кавычками, а в каких - без?

Я раньше как-то писал программки, через них открывались и считывались файлы, все было вроде б без кавычек. Это - первый раз

Ответить

Номер ответа: 12
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #12 Добавлено: 07.08.07 02:44
Ну так ты не написал, каким образом ты запускаешь свою прогу и как передаешь путь.

Ответить

Номер ответа: 13
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #13
Добавлено: 07.08.07 23:59
через файл, который является файлом этой программы..., ну как через .doc открывается word а потом просто считываю command - путь к этому файлу, все как обычно

Ответить

Номер ответа: 14
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #14 Добавлено: 08.08.07 01:02
Т.е. ты ассоциировал какой-то тип файла со своей прогой. Так вот, запуск твоей проги, видимо, происходит с параметром "%1", а не просто %1 (или ""%1"" вместо "%1";).

Ответить

Номер ответа: 15
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #15
Добавлено: 08.08.07 20:21
Так и было... гм, а говорят еще, что телепатов не существует...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам