1

Тема: Не найден файл. В имени есть пробел.

TCS 6.2.0.0(15918) SP3, Win 7, 32 р.
Выполняется отчёт, который автоматически формирует файл. Имя файла
формируется уникальное. Например: "Дата Время"
Пытаюсь скопировать файл в имени которого находится пробел.
Приведённый ниже код работает у меня и у коллеги (Win XP).
Т.е. копирование выполняется правильно. У пользователя не хочет.

   OldFileName = Patch + FileName
    NewFileName = Patch + DocName+ "_Подписи.xls"
    Set fso = CreateObject("Scripting.FileSystemObject")

'Call TCSApp.ShowMessageBox("Сообщение", "<" + OldFileName + "> =======" + NewFileName) 

    On Error Resume Next 'начало блока обработки ошибок. 
    fso.CopyFile OldFileName, NewFileName
    If Err Then    'если произошла ошибка, то обрабатываем её 
        Call TCSApp.ShowMessageBox(Err.Source, "Описание: "+Err.Description + " - "+OldFileName+" --" + Err.Source)       
        Err.Clear ' очищаем информацию об ошибке
        ErrorEdit = True
        Exit Sub
    End If                      

Возникает ошибка:
Недопустимое имя или номер файла -
"C\TCSFiles\Temp\Template_29052014 101400.xls"
--Ошибка выполнения Microsoft VBScript

Заменяю строку кода

   OldFileName = Patch + FileName

на

   OldFileName = Chr(34) + Replace(Patch + FileName," ","%20", 1, -1) + Chr(34)

Всё равно возникает такая же ошибка. Посоветуйте, как написать
правильно?

2

Re: Не найден файл. В имени есть пробел.

Извините, сообщение не
Недопустимое имя или номер файла -
"C\TCSFiles\Temp\Template_29052014 101400.xls"
--Ошибка выполнения Microsoft VBScript

а
Не найден файл -
"C\TCSFiles\Temp\Template_29052014 20101400.xls"
--Ошибка выполнения Microsoft VBScript

после замены строки

Недопустимое имя или номер файла -
"C\TCSFiles\Temp\Template_29052014%20101400.xls"
--Ошибка выполнения Microsoft VBScript

Re: Не найден файл. В имени есть пробел.

Ну это ошибка не из TechnologiCS конечно же.

Сомнительно чтобы

fso.CopyFile

не понимала пробелы. Пути в винде можно заключать в кавычках, но в данном случае думается что это излишне.
А путь C\TCSFiles руками набит с ошибкой или он реально так странно выглядит? Проверьте что имя файла задано точно (нет ошибки).

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

4 (изменено: Дмитрий Гамий, 29-05-2014 09:51:18)

Re: Не найден файл. В имени есть пробел.

JAEAEJ пишет:

C\TCSFiles\Temp\Template_29052014 101400.xls

Может дело всё в том, что после С отсутствует смвол "двоеточие"?
Правильнее, наверное такой путь:
C:\TCSFiles\Temp\Template_29052014 101400.xls
Какое значение присваивается переменной Patch?

5

Re: Не найден файл. В имени есть пробел.

2 Дмитрий Гамий
Это просто опечатка. Руками набивал. Двоеточие есть.
    Patch = ScriptHelper.ApplicationTempDirectory   'Путь к временным файлам


2 Олег Зырянов

Этот путь правильный. Именно он стоит в настройках TCS.

Re: Не найден файл. В имени есть пробел.

Этот путь правильный. Именно он стоит в настройках TCS.

Я имею ввиду полный путь к файлу, то есть файл реально существует?

ну и блокировки проверьте так же.

7 (изменено: , 29-05-2014 11:17:49)

Re: Не найден файл. В имени есть пробел.

2 Олег Зырянов

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

Отчёт выполняется под управлением СА. Перед копированием файла
ждём окончания работы СА.

    s = "Run"
    Do While s = "Run" 'Ждём окончания выполнения команд
        s = It.CommandEnd
        It.Sleep(200)
    Loop

    FileName = It.NameWin 'Читаеи имя последнего открытого окна

На этот момент процесса EXCEL.EXE в памяти нет. СА завершает работу EXCEL, перед окончанием работы.

2 Олег Зырянов

Приведённый ниже код работает у меня и у коллеги (Win XP).

Re: Не найден файл. В имени есть пробел.

Приведённый ниже код работает у меня и у коллеги (Win XP).

Угу. Файл заблокирован!
мы на тоже самое натыкались с приложениями офиса на Window 7 и выше, на XP все работало.

9

Re: Не найден файл. В имени есть пробел.

2 Олег Зырянов

мы на тоже самое натыкались с приложениями офиса на Window 7 

У меня

TCS 6.2.0.0(15918) SP3, Win 7, 32 р.

Всё работает без проблем. У пользователей ХР. Не работает. Права на
папку полные. Что делать?

Re: Не найден файл. В имени есть пробел.

Еще раз - файл заблокирован! Права здесь не причем.

Re: Не найден файл. В имени есть пробел.

Хотя если верить хелпу www.script-coding.com/WSH/FileSy … .html#3.2. это не просто копирование файла. Так что нюансы могут быть с этой функцией.

12

Re: Не найден файл. В имени есть пробел.

2 Олег Зырянов

нюансы могут быть с этой функцией.

Я то же это понял.
Исходно стояла задача: сформировать отчёт подписей и сохранить
его в файловом составе документа без участия человека. Имя
сохраняемого файла должно быть:Обозначение_Подписи.xls, т.е.
нужно было переименовать созданный файл и добавить его в файловый
состав документа. Причём статус документа не должен влиять на эту
операцию. Переименовывать файл у меня не получалось, поэтому я и
применил метод CopyFile. Поковырявшись в инете нашёл другое
решение, которое отлично отрабатывает и у меня и у пользователя.
Привожу его:

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = FSO.GetFile(OldFileName) 
    On Error Resume Next 'начало блока обработки ошибок. 
    file.Move  NewFileName
    If Err Then    'если произошла ошибка, то обрабатываем её 
        Call TCSApp.ShowMessageBox(Err.Source, "Описание: "+Err.Description + " - "+OldFileName+" --" + Err.Source)       
        Err.Clear ' очищаем информацию об ошибке
' Если такой файл уже есть, то продолжаем выполнение проги.
        If InStr(1, Err.Description, "уже существует") = 0 Then
            ErrorEdit = True 
            Exit Sub                                 
        End If
    End If                      
    Set file = Nothing

Можно считать тему закрытой. Всем спасибо за участие.

13

Re: Не найден файл. В имени есть пробел.

P.S. Хотя задача и решилась, но вопрос о работе метода CopyFile,
к сожалению, так и остался не решённым.

Re: Не найден файл. В имени есть пробел.

Переименовывать файл у меня не получалось,

копировать не получалось.

все указывает на то что файл блокируется каким-то приложением.

15

Re: Не найден файл. В имени есть пробел.

2 Олег Зырянов

копировать не получалось. 

Я выразился правильно

Переименовывать файл у меня не получалось,

Мне нужно было именно переименовать созданный файл отчёта из автома-
тически созданного имени "Template_Date Time" в "ОбозначениеДокумента_Подписи". Но метода RENAME я не нашёл. Поэтому и хотел использовать метод CopyFile, с последующим
уничтожением исходного файла.

16

Re: Не найден файл. В имени есть пробел.

В дополнение
на форуме был диалог http://forum.technologics.ru/topic1527.html и, следуя предложенной в нем ссылке, вот справка с примерами msdn.microsoft.com/en-us/library … s.85).aspx